首页 > 解决方案 > 使用 Docker 在 AWS EC2 上运行 Elasticsearch

问题描述

我正在尝试在 AWS EC2 实例上使用 Docker 运行 Elasticsearch,但是当它运行时,几秒钟后将停止,你们中的任何人都有任何经验可能是什么问题?

这是我的 Elasticsearch 配置docker-compose.yaml

 elasticsearch:
  build:
    context: ./elasticsearch
    args:
      - ELK_VERSION=${ELK_VERSION}
  volumes:
    - elasticsearch:/usr/share/elasticsearch/data
  environment:
    - cluster.name=laradock-cluster
    - node.name=laradock-node
    - bootstrap.memory_lock=true
    - discovery.type=single-node
    - "ES_JAVA_OPTS=-Xms7g -Xmx7g"
    - xpack.security.enabled=false
    - xpack.monitoring.enabled=false
    - xpack.watcher.enabled=false
    - cluster.initial_master_nodes=laradock-node
  ulimits:
    memlock:
      soft: -1
      hard: -1
    nofile:
      soft: 65536
      hard: 65536
  ports:
    - "${ELASTICSEARCH_HOST_HTTP_PORT}:9200"
    - "${ELASTICSEARCH_HOST_TRANSPORT_PORT}:9300"
  depends_on:
    - php-fpm
  networks:
    - frontend
    - backend

这是我的Dockerfile

FROM docker.elastic.co/elasticsearch/elasticsearch:7.5.1

RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch discovery-ec2

EXPOSE 9200 9300

另外,我sysctl -w vm.max_map_count=655360在我的 AWS EC2 实例上做了

注意:我的 AWS EC2 实例是 Ubuntu 18.4

谢谢

标签: amazon-web-servicesdockerelasticsearchamazon-ec2

解决方案


我不确定你的docker-compose.yaml情况,因为你没有在你的 dockerfile 中提到这个,但我能够重现这个问题。我在我的 AWS 账户中启动了相同的 ubuntu 18.4,并使用您dockerfile使用以下命令启动 ES docker 容器:

docker build --tag=elasticsearch-custom .
docker run -ti -v /usr/share/elasticsearch/data elasticsearch-custom

我的 docker 容器在启动后也停止了,如下所示:

ubuntu@ip-172-31-32-95:~$ docker ps -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS                      PORTS               NAMES
03cde4a19389        elasticsearch-custom   "/usr/local/bin/dock…"   33 seconds ago      Exited (78) 6 seconds ago                       mystifying_napier 

当检查控制台上的日志时,在启动 docker 时,我发现以下错误:

错误:[1] 引导检查失败 [1]:默认发现设置不适合生产使用;必须至少配置 [discovery.seed_hosts、discovery.seed_providers、cluster.initial_master_nodes] 之一

这是众所周知的错误,只需添加-e "discovery.type=single-node"到 docker run 命令即可轻松解决。在 docker run 命令中添加后如下:

docker run -e "discovery.type=single-node" -ti -v /usr/share/elasticsearch/data elasticsearch-custom

它运行良好,如下所示:

CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                NAMES
191fc3dceb5a        elasticsearch-custom   "/usr/local/bin/dock…"   8 minutes ago       Up 8 minutes        9200/tcp, 9300/tcp   recursing_elgamal

推荐阅读