后续启动Elasticsearch Docker容器节点

laawzig2  于 2023-10-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(131)

虽然这不是一个直接的编程语言问题,但这是我在设置本地开发环境时遇到的一个问题,因此它与此密切相关,我相信其他软件工程师也会遇到这个问题。因此,我没有在我的开发机器上安装Elasticsearch(重复安装多个节点),而是尝试创建一个可重用的Docker环境,但没有成功。
我在Docker中定义了一个Elasticsearch集群,使用Docker网络。基本上这个https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html,但为了完整起见,我运行:

docker network create elastic
docker run --name es01 --net elastic -p 9200:9200 -it docker.elastic.co/elasticsearch/elasticsearch:8.9.0

一切都很好,所以我添加了第二个节点:

docker run -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e ENROLLMENT_TOKEN="<token>" --name es02 -p 9201:9200 --net elastic -it docker.elastic.co/elasticsearch/elasticsearch:8.9.0

这也很好,我看到集群中的第二个节点使用GET /_cluster/health运行。
所以现在我control-c退出交互模式,并使用docker start es02重新启动容器,但它没有启动。docker ps仅显示es 01。再次以交互方式运行它(-i),我看到:

  • 错误:跳过安全自动配置,因为节点似乎不是第一次启动。该节点可能已经是群集的一部分,此自动设置实用程序仅用于为新群集配置安全性。*

这就是我的问题所在。我想它可能仍然在获取ENROLLMENT_TOKEN环境变量,这会导致它认为需要注册,所以我提交了容器并创建了一个没有-e开关的新容器。同样的错误。
我尝试在没有xpack安全性的情况下创建容器,添加-e "xpack.security.enabled=false"

  • 错误:跳过安全自动配置,因为似乎已经配置了安全。*

大概是因为elasticsearch.yml默认包含true。不管怎样,有人遇到过这个吗?认识到这个问题吗?任何想法都欢迎!
P.S.我在Windows、Mac和Ubuntu上看到了同样的行为(Vagrant框)。

b4lqfgs4

b4lqfgs41#

我能拼凑起来的解决方案是一个小黑客,但它会完成工作。
创建或启动您的第一个/主节点,如原始帖子中所述。
生成注册令牌docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
启动第二个独立容器docker run -p 9201:9200 -p 9301:9300 -d --name es02 --ip 172.18.0.5 -e ES_JAVA_OPTS="-Xms1g -Xmx1g" --net elastic -it docker.elastic.co/elasticsearch/elasticsearch:8.9.0
登录到刚刚创建的新es 02容器docker exec -it es02 /bin/bash
删除配置、密码和数据:

rm config/elasticsearch.yml
rm config/elasticsearch.keystore
rm -rf data/*

仅使用群集名称重新添加配置文件,然后使用之前创建的注册令牌启动节点:

echo "cluster.name: \"docker-cluster\"" > config/elasticsearch.yml
bin/elasticsearch --enrollment-token <enrollment token>

让设置发生-你会看到很多JSON在屏幕上飞行。当它停止时,control-cexit

docker stop es02
docker start es02

现在可以正常启动和停止第二个节点。

相关问题