当前位置: 首页 > 知识库问答 >
问题:

ES Docker容器未加入具有相同群集名称的另一个Docker容器

佘京
2023-03-14

由于ES的docker容器,我面临一个奇怪的问题,我之前在9200主机端口的docker容器中运行独立的ES 7.10(内部docker端口与标准9200和9300 ES端口相同),同时,我启动了三个ES docker容器(有一个不同的小版本7)(它们应该组成集群,让我们把它命名为docker ES集群)。

这三个ES docker容器使用的主机端口为9200、92019202,因此,由于端口冲突(ES 7.10)ES容器,使用9200的集群中的ES容器无法启动。

因此,我停止了独立的7.10 docker容器,并再次重新启动了3群集ES容器,但现在我的其他2个正在侦听9201、9202的ES容器没有启动,它们的日志包含以下警告:

{“type”:“server”,“timestamp”:“2020-12-14T15:56:57651 0000”,“level”:“WARN”,“component”:“o.e.c.c.ClusterFormationFailureHelper”,“cluster.name”:“docker cluster”,“node.name”:“es2”,“message”:“尚未发现主机,此节点以前未加入引导(v7)群集,此节点必须发现符合主机条件的节点[]引导集群:hfrom主机提供程序和[{es2}{eBtsR2XgRVWqPdUAP_n_Ew}{tZ9FRAbPTAmZZle_5MaVoA}{172.18.0.3}{172.18.0.3:9300}{dim}{ml.machine_memory=2084032512,xpack.installed=true,ml.max_open_jobs=20}];节点项0,项0中最后接受的版本0“}

在此之后,我停止了所有docker容器,删除了所有docker映像,做docker修剪,系统重启,但没有什么是修复的问题,即使我从清洁状态开始,它似乎集群状态是混乱的2 ES容器,它没有得到修复即使在重新启动docker容器之后。

我的docker compose for ES容器如下所示,我没有使用卷绑定

 es2:
    image: "docker.elastic.co/elasticsearch/elasticsearch:<es-version>"
    container_name: 2
    environment:
    - node.name=2
    - cluster.name=docker-cluster
    - cluster.initial_master_nodes=1,2,3
    - discovery.seed_hosts=1,3
    - ES_JAVA_OPTS=-Xms1g -Xmx1g
    ports:
    - "9201:9200"
    networks:
    - localenv

共有2个答案

公良云
2023-03-14

我修复了这个问题,通过去docker-桌面故障排除选项和做清洁/清除选项,如下面的屏幕截图所示。

郭永怡
2023-03-14

elasticsearch在新版本中(我认为是上面的7.8)对从集群连接和分离节点有非常严格的规则。您无法轻松分离主节点甚至数据节点。我建议使用elasticsearch节点工具:https://www.elastic.co/guide/en/elasticsearch/reference/current/node-tool.html

最简单的方法是在所有节点上使用以下命令:

elasticsearch-node detach-cluster
 类似资料:
  • 我有两个Docker容器在同一个网络中运行,我希望其中一个通过spring Webclient调用另一个。我确信他们都在同一个网络中- “finishConnect(…)失败:连接被拒绝:附件加载程序秒/172.21.0.5:80;嵌套异常为io。内蒂。频道AbstractChannel$AnnotatedConnect异常:finishConnect(…)失败:连接被拒绝:附件加载程序秒/172

  • 我有一个依赖于多个docker容器的应用程序。我使用docker撰写,以便所有容器都在同一个网络中进行容器间通信。但是,我的两个容器在各自的容器中监听相同的端口8080,但是映射到主机上的不同端口: 8072,8073。对于集装箱间的通信,因为我们使用集装箱的端口,这会引起问题吗? 限制条件: 我需要两个容器才能运行我的应用程序。因此,我无法将具有相同内部端口的其他容器隔离到不同的网络 所有容器都

  • 我试图对多个主机运行使用相同名称的容器运行ansible playbook。有3台主机,每个主机运行一个名为“Web”的容器。我在试着用docker连接。

  • 问题内容: 我基于两个不同的图像创建了两个docker容器。一个数据库,另一个用于网络服务器。这两个容器都在我的Mac OS X上运行。 我可以从主机访问数据库容器,也可以从主机访问Web服务器。 但是,如何从Web服务器访问数据库连接? 我启动数据库容器的方式是 我开始了wls容器作为 我可以通过连接到主机上的数据库 我可以以以下方式访问主机上的wls: 问题答案: 最简单的方法是使用–link

  • 我基于两个不同的映像创建了两个docker容器。一个是db,另一个是WebServer。这两个容器都在我的mac OSX上运行。 我可以从主机访问db容器,也可以从主机访问webserver。 我可以访问主机上的wls作为

  • 问题内容: 我有一个运行Node.js的api服务器,该服务器正在使用它的集群模块,并且测试看起来还不错。现在,我们的IT部门希望转而使用令我感到高兴的Docker容器,但除了玩转之外,我从未真正使用过它。但是我有一个想法,Node.js应用程序在单个Docker进程中运行,因此集群模块并不是最好的,因为单个Docker进程可能是安装过程中的一个慢点,直到在该进程中拆分请求为止通过集群模块。 因此