2017-11-28 1 views
0

동시에 여러 버전의 ElasticSearch를 실행하려고 할 때 쉽습니다. 여기 내 명령이 있습니다 :docker에서 ElasticSearch - 두 번째 인스턴스가 첫 번째 인스턴스를 종료합니다.

docker run -d --rm -p 9250:9200 -p 9350:9300 --name es_5_3_3_integration -e "xpack.security.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:5.3.3 
docker run -d --rm -p 9251:9200 -p 9351:9300 --name es_5_4_3_integration -e "xpack.security.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:5.4.3 

첫 번째 도커가 크게 시작됩니다. 두 번째 도커가 시작되지만 첫 번째 도커를 죽이는 비용이 든다. -d없이 실행 한 경우, 도커가 멈춘 이유에 대한 UI 정보가 다시 표시되지 않습니다.

+1

도커에 얼마만큼의 RAM을 제공 했습니까? ES 5는 기본적으로 2GB의 힙으로 시작하므로 (jvm.options 참조) Docker가 4GB 이상이 아니면 첫 번째 인스턴스가 실제로 죽습니다. – Val

+0

나는 아무것도 지정하지 않았다. – jhilden

+0

아마도 그럴 것입니다. 도커에게 500M 메모리 만 사용하도록 어떻게 알릴 수 있습니까? – jhilden

답변

0

기본적으로 도커의 ES는 2G의 메모리를 사용하려고합니다. 그래서 2 명의 도커는 4G 메모리를 차지하려고했습니다. 제 기계에는 없었습니다.

솔루션 :

docker run -d --rm -p 9250:9200 -p 9350:9300 --name es_5_3_3_integration -e "xpack.security.enabled=false" -e ES_JAVA_OPTS="-Xms200m -Xmx200m" docker.elastic.co/elasticsearch/elasticsearch:5.3.3 
docker run -d --rm -p 9251:9200 -p 9351:9300 --name es_5_4_3_integration -e "xpack.security.enabled=false" -e ES_JAVA_OPTS="-Xms200m -Xmx200m" docker.elastic.co/elasticsearch/elasticsearch:5.4.3 
docker run -d --rm -p 9252:9200 -p 9352:9300 --name es_5_5_3_integration -e "xpack.security.enabled=false" -e ES_JAVA_OPTS="-Xms200m -Xmx200m" docker.elastic.co/elasticsearch/elasticsearch:5.5.3 
docker run -d --rm -p 9253:9200 -p 9353:9300 --name es_5_6_4_integration -e "xpack.security.enabled=false" -e ES_JAVA_OPTS="-Xms200m -Xmx200m" docker.elastic.co/elasticsearch/elasticsearch:5.6.4 

이 @val에 감사 : 메모리의 양을 제한 각 인스턴스 4 개 동시 항만 노동자에 대한 명령을 작업, 다음 스위치 -e ES_JAVA_OPTS="-Xms200m -Xmx200m"

전체를 사용하여 200MB하기 위해 수행하려고 ES 누가이 질문에 정말로 답했다.

+0

다행 이네. ES에 대해 200MB의 힙만으로 너무 멀리 가지 않겠지 만 ;-) – Val

0

이 메모리 문제의 부족 인 경우 컨테이너가 (OOM를) OOMKilled 경우, 당신은 확인할 수 있습니다.

먼저 컨테이너의 종료 코드가 137 = (128 + 9) 컨테이너가 SIGKILL을 받았는지 확인합니다.
당신은 그런 당신이 컨테이너의 상태를 확인할 수 있습니다 docker ps -a 또는

docker inspect --format='{{.State.ExitCode}}' $INSTANCE_ID 

그것을 테스트 할 수

docker inspect --format='{{.State.OOMKilled}}' $INSTANCE_ID 

을가 true를 돌려주는 경우, 그것은 OOM 문제였다.

자세한 내용은 https://docs.docker.com/engine/reference/run/#user-memory-constraints입니다.
추출 : 메모리 부족 (KMS) 오류가 발생하면 기본적으로

는, 커널이 컨테이너에서 프로세스를 죽인다. 이 동작을 변경하려면 --oom-kill-disable 옵션을 사용하십시오. -m/- memory 옵션을 설정 한 컨테이너에서만 OOM 킬러를 비활성화하십시오. -m 플래그가 이 아닌 경우 호스트의 메모리가 부족 해지고 은 메모리를 확보하기 위해 호스트의 시스템 프로세스를 종료해야 할 수 있습니다.

관련 문제