【问题标题】:Unable to start elasticsearch docker container无法启动 elasticsearch docker 容器
【发布时间】:2017-12-28 08:57:49
【问题描述】:

我已经在 arch os 上安装了 docker,并且我已经使用 docker 一段时间了。最近,docker run -v "$PWD/esdata":/usr/share/elasticsearch/data -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms1g -Xmx1g" elasticsearch:5.1 不再起作用,容器会在几秒钟后自动停止。然后我尝试了here 给出的解决方案。通过将tail -f /dev/null 添加到我上一个命令的末尾。现在,容器运行了,但是当我转到 localhost:9200 时我什么也没得到 ​​p>

【问题讨论】:

  • “现在,容器运行”:因为您正在其中运行 tail 命令。这肯定不是你想要的。在键入命令之前,请务必了解命令的作用。
  • 你能通过docker logs 告诉容器的日志吗?
  • 您是否尝试连接到 localhost:9300,因为您的命令有重复端口选项?顺便说一句,容器必须在前台运行一些东西才能运行,如果前台进程停止,容器也会停止。这就是添加tail命令时容器运行的原因。

标签: elasticsearch docker docker-container docker-volume


【解决方案1】:

使用下面的命令遇到了同样的问题

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.2.4

我的环境是 MacOS 上的 docker。根据this article Docker 内存中的“对于那些使用 Windows 或 OSX 的用户”部分,至少需要 4GB。更改内存限制后,容器启动没有任何问题。

【讨论】:

  • 我在 Manjaro 遇到了同样的问题。这就是我解决它的方法docker run --memory="4g" --name elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.15.1
【解决方案2】:

运行镜像时设置ES_JAVA_OPTS有问题,应该是:

docker run -d -p 9200:9200 -p 9300:9300 -e 'ES_JAVA_OPTS: -Xms1g -Xmx1g' elasticsearch:5.1

【讨论】:

  • 没有帮助。我还在上面的评论中附上了日志
  • @Reuben_v1 似乎将卷安装到Docker 容器有问题。
【解决方案3】:

在我的情况下,这是一个权限问题,所以我在卷旁边添加了权限:

这个://读、写、执行

version: '3'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
    environment:
      - discovery.type=single-node
    volumes:
      - /home/shared-content-initiative/elasticsearch:/usr/share/elasticsearch/data //read, write and execute
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml


【讨论】:

    【解决方案4】:

    经过大量研究,我尝试了以下方法。它现在对我有用。首先,如果使用的是 Elastic Search 5 或 6,请确保您是否安装了 Java。对于版本 7,我们不需要特别说明。

    激活服务: 在 nano 编辑器中打开 yml 文件进行以下设置。

    sudo nano /etc/elasticsearch/elasticsearch.yml
    

    确认以下设置:(取消注释以下行,它们应该从开头开始,没有任何空格)

    # Set the bind address to a specific IP (IPv4 or IPv6):
    #
    network.host: 127.0.0.1
    #
    # Set a custom port for HTTP:
    #
    http.port: 9200
    
    # Pass an initial list of hosts to perform discovery when this node is started:
    # The default list of hosts is ["127.0.0.1", "[::1]"]
    #
    discovery.seed_hosts: []
    

    在 '/etc/elasticsearch/jvm.options' 中确认 jvm.options 文件的配置:

    sudo nano /etc/elasticsearch/jvm.options
    

    内存分配Xms 和Xmx: 为获得最佳性能分配不超过 50% 的必要内存。如果您知道 swappiness 和 timeout 等,您可以调整其他设置,但如果您不确定,请不要触摸它们。

    # Xms represents the initial size of total heap space
    # Xmx represents the maximum size of total heap space
    -Xms4g
    -Xmx4g
    

    我有一个 8 GB 内存,因此分配了 4 GB。随意在集合 {1024m, 750m, 512m, 256m} 中分配-Xms2048m 和-Xmx2048m 等。这是您对使用方式的选择。

    修复上述问题后,运行以下命令并重新启动系统。我们需要重新启动,因为我们编辑了系统范围的环境配置才能生效。

    同时通过 docker 和其他介质安装不是问题。但是,从两种方式启动服务会产生冲突,因为无法复制侦听的 TCP 端口。简而言之,从 docker pull 镜像或本地安装运行弹性搜索服务。不是同时两个。如果您有关于重复端口的错误,请确保点击以下命令:

    sudo systemctl stop elasticsearch.service
    

    要让 Elasticsearch 在系统重新启动时自动重新加载,请使用以下命令:(如果通过 wget 和 apt / 从二进制文件 / 除 docker image pull 之外的任何其他弹性搜索安装过程安装。对于 docker,只需重新加载 daemon -d 就足够了(第一个命令)):

    sudo systemctl daemon-reload
    sudo systemctl enable elasticsearch.service
    sudo systemctl start elasticsearch.service
    

    它对我很有效。我希望这可以澄清问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      • 2018-12-01
      • 2020-01-28
      • 2021-04-21
      相关资源
      最近更新 更多