【问题标题】:About docker container's exit when docker-compose up关于 docker-compose up 时 docker 容器退出
【发布时间】:2020-05-27 07:48:41
【问题描述】:

我正在尝试将 Elasticsearch 与 docker 一起使用。

您可以在此处查看指南 -> https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

下面是我的 docker-compose.yml

version: '2.2'
services:
  elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.0
    container_name: elasticsearch1
    environment:
      - node.name=master-node
      - cluster.name=es-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es-data01:/usr/share/elasticsearch/data
    ports:
      - 127.0.0.1:9200:9200
      - 127.0.0.1:9300:9300
    networks:
      - elastic
    stdin_open: true
    tty: true

  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.0
    container_name: elasticsearch2
    environment:
      - node.name=data-node1
      - cluster.name=es-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch1"
    ports:
      - 127.0.0.1:9301:9300
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es-data02:/usr/share/elasticsearch/data
    networks:
      - elastic
    stdin_open: true
    tty: true

volumes:
  es-data01:
    driver: local
  es-data02:
    driver: local

networks:
  elastic:
   # driver: bridge

问题是

  1. 我无法通过curl -XGET localhost:9200 连接
  2. docker 容器在几秒钟后自动退出

你能帮帮我吗?

ps:当我尝试docker run 时,它可以工作。它们有什么区别?

docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch -it --rm -v els:/usr/share/elasticsearch/data -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.7.0

【问题讨论】:

  • 我找到了一些线索。当docker run 没有-e "discovery.type=single-node" 选项容器也退出时......但不知道为什么
  • 您是否有机会浏览我的答案和其中提供的链接,如果您需要更多信息,请告诉我。

标签: docker elasticsearch docker-compose


【解决方案1】:

请使用docker logs <your stopped container-id>查看容器日志,这里可以使用docker ps -a命令获取容器id。

也请关注this SO answer和set the memory requirements 这将帮助您在 docker 中运行 Elasticsearch。如果它没有帮助,请提供您可以如前所述获得的日志。

基于 cmets 添加更新的docker-compose

version: '2.2'
services:
  elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.0
    container_name: elasticsearch1
    environment:
      - node.name=master-node
      - node.master=true
      - cluster.name=es-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "cluster.initial_master_nodes=master-node"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es-data01:/usr/share/elasticsearch/data
    ports:
      - 127.0.0.1:9200:9200
      - 127.0.0.1:9300:9300
    networks:
      - elastic
    stdin_open: true
    tty: true

  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.0
    container_name: elasticsearch2
    environment:
      - node.name=data-node1
      - node.master=false
      - cluster.name=es-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "cluster.initial_master_nodes=master-node"
    ports:
      - 127.0.0.1:9301:9300
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es-data02:/usr/share/elasticsearch/data
    networks:
      - elastic
    stdin_open: true
    tty: true

volumes:
  es-data01:
    driver: local
  es-data02:
    driver: local

networks:
  elastic:
   # driver: bridge

【讨论】:

  • 我发现了这些错误日志max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
  • 太好了,所以你有两个问题,第一个将由elastic.co/guide/en/elasticsearch/reference/current/… 解决,另一个我很快就会ping通。
  • 感谢帮助,内存问题已解决。你能帮忙解决第二个错误吗?
  • @JS_Kim,是的,这样做
  • 好的,我试试。我猜..添加的行分配主节点?那么在两个节点之间建立链接?
【解决方案2】:

在您关注本文时,https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

值得检查第二部分的限制和内存资源,因为 docker-compose 中的容器由于资源不足而退出。

【讨论】:

    【解决方案3】:

    Exited with code 137 错误是由于主机上的资源限制(通常是 RAM)。您可以通过将此行添加到 docker-compose 文件的环境变量来解决此问题:

    - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    

    您可以在this 链接中阅读有关 Elasticsearch 官方文档的更多关于堆大小设置的信息。

    【讨论】: