Docker上的ElasticSearch - 第二个实例杀死了第一个实例

时间:2017-11-28 20:38:46

标签: docker elasticsearch

我试图同时运行多个版本的ElasticSearch,应该很容易。这是我的命令:

<p>
  <a href="callto://4407398169667">+44 (073) 981-69667</a>
  <span>
    <a href="mailto:admin@indelibleelevations.com?Subject=Quick%20query" target="_top">admin@indelibleelevations.com</a>
  </span>
</p>

第一个码头工人起得很好。第二个码头工人开始,但代价是杀死第一个码头工人。如果我在没有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 的情况下运行它,我就不会向用户界面提供有关码头工人停止原因的任何信息。

2 个答案:

答案 0 :(得分:0)

默认情况下,docker上的ES尝试占用2G的内存。因此2个码头工人试图占用4G内存,这是我的机器没有的。

解决方案:使用以下开关-e ES_JAVA_OPTS="-Xms200m -Xmx200m"

将每个ES实例尝试占用的内存量限制为200mb

4个并发码头工人的完整工作命令:

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在评论中真正回答了这个问题。

答案 1 :(得分:0)

如果这是内存不足的问题,您可以检查您的容器是否 OOMKilled OOM)。

首先检查容器的退出代码是否为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的进一步详情 提取:

  

默认情况下,如果内存不足,内核会终止容器中的进程   发生(OOM)错误。要更改此行为,请使用   --oom-kill-disable选项。仅在已设置-m / - memory选项的容器上禁用OOM杀手。如果-m标志不是   设置,这可能导致主机内存不足并需要   杀死主机的系统进程以释放内存。