无法启动elasticsearch docker容器。

4
我已在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 不再起作用,容器会自动停止。 我尝试了这里给出的解决方案。 在我的先前命令结尾添加 tail -f /dev/null。 现在,容器正在运行,但当我访问localhost:9200时没有任何反应。

现在,容器正在运行:因为您在其中运行了“tail”命令。这绝对不是您想要的。在输入命令之前,请务必确保理解其功能。 - Henry
你能通过docker logs <容器名称或容器ID>命令告诉容器的日志吗? - Himanshu sharma
请在此处查看翻译后的文本:https://pastebin.com/5JzjvKZL - Reuben_v1
你尝试连接到localhost:9300了吗?因为你的命令有重复的端口选项。另外,容器必须有前台运行的进程才能运行,如果前台进程停止,容器也会停止。这就是为什么当你添加tail命令时,容器才会运行的原因。 - Branimir Đurek
4个回答

10

我在使用以下命令时遇到了相同的问题:

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

我的环境是MacOS上的Docker。根据这篇文章中的“对于使用Windows或OSX的用户”部分,Docker内存需要至少为4GB。更改内存限制后,容器可以正常启动。


3
我在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 - Eduardo Rodriguez

1
在运行镜像时设置ES_JAVA_OPTS存在问题,正确的设置方式为:
docker run -d -p 9200:9200 -p 9300:9300 -e 'ES_JAVA_OPTS: -Xms1g -Xmx1g' elasticsearch:5.1

没有帮助。我也在上面的评论中附上了日志。 - Reuben_v1
@Reuben_v1 似乎在将卷挂载到 Docker 容器时遇到了问题。 - Arpit Aggarwal

1
在我的情况下,这是一个权限问题,所以我在卷旁边添加了权限:
这个://读、写和执行
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



0
我在做了很多研究后尝试了以下方法。现在它对我有用了。首先,如果使用 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

内存分配 XmsXmx: 为了获得最佳性能,请不要超过50%的必要内存。如果您了解swappiness和timeout等其他设置,则可以进行微调,但是如果您不确定,请不要触碰它们。

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

我有8GB的内存,因此分配了4GB。可以随意分配-Xms2048m-Xmx2048m等在集合{1024m、750m、512m、256m}中。这取决于你的使用需求。

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

通过docker和其他媒介进行安装并不是问题。但是,从两种方式启动服务会产生冲突,因为监听的TCP端口不能重复。简而言之,从docker拉取的镜像或本地安装中运行elastic search服务。不要同时运行两者。如果出现端口重复的错误,请确保执行以下命令:

sudo systemctl stop elasticsearch.service

为了让Elasticsearch在系统重启时自动重新加载,请使用以下命令:(如果是通过wget&apt /从二进制文件/任何其他弹性搜索安装过程安装的,而不是docker镜像拉取。只需重新加载守护程序即可对于docker(第一个命令)):
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service

对我来说它很好用。希望这能澄清问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接