docker - Zookeeper我的ID不在对等列表中

标签 docker apache-zookeeper

我正在努力在Docker中部署动态Zookeeper集群。我已经差不多完成了,但是我只能停留在一个 Realm :动态配置参数。我有一个入口点脚本,该脚本读取传递给它的有关其自身ID和其他Zookeeper服务器IP的环境变量。

在Zookeeper启动之前,它将id写入/tmp/zookeeper/$MYID/myid,这种情况是1。我也正在将server.1=$MY_IP:2888:3888写入zoo.cfg文件。

如果我尝试使用具有该配置的zkServer.sh start-foreground启动Zookeeper,则会出现以下错误:

root@7f23a5d1e5a1:/# zkServer.sh start-foreground
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
2015-12-15 21:37:35,552 [myid:] - INFO  [main:QuorumPeerConfig@109] - Reading configuration from: /opt/zookeeper/bin/../conf/zoo.cfg
2015-12-15 21:37:35,556 [myid:] - ERROR [main:QuorumPeerMain@86] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: parameter: server.1 must be in a separate dynamic config file
    at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:244)
    at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:126)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:110)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)
Invalid config, exiting abnormally

但是,如果我从server.1=$MY_IP:2888:3888文件中删除zoo.cfg,则会出现以下错误:
2015-12-15 21:26:38,190 [myid:] - ERROR [main:QuorumPeerMain@98] - Unexpected exception, exiting abnormally
java.lang.RuntimeException: My id 0 not in the peer list
    at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:643)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:171)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:120)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)

reading the docs之后,我仍然不确定我的配置在哪里搞砸了。

这是我的zoo.cfg文件:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
quorumListenOnAllIPs=true
standaloneEnabled=false
dynamicConfigFile=/opt/zookeeper/conf/zoo.cfg.dynamic
server.1=192.168.1.46:2888:3888

这是myid文件:
root@7f23a5d1e5a1:/# cat /tmp/zookeeper/1/myid 
1

如何修复此配置以及它应该是什么样?我正在使用Zookeeper 3.5.0-alpha。

最佳答案

由于Dockerfile执行命令的方式而解决了该问题。由于入口点脚本在构建时在容器内运行,因此不会读取任何环境变量,因为它们在构建过程中不存在。当入口点脚本作为运行脚本的子进程/步骤(在这种情况下,只是基本的run.sh)在运行时运行时,然后评估变量作为运行时的一部分而存在。

关于docker - Zookeeper我的ID不在对等列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34300198/

相关文章:

python - 运行 pip 安装 : There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

docker - Docker运行多个没有--scale的容器实例

java - Zookeeper集群设置

ssl - Kafka 和 Zookeeper TLS

ssl - Zookeeper TLS 错误 : Unsuccessful handshake with session 0x0 (org. apache.zookeeper.server.NettyServerCnxnFactory)

python - Django 服务器不会在 Docker-Compose 中启动

node.js - 如何在 Kubernetes Pod 内调试 NodeJS 应用程序?

docker - 如何停止 docker 的虚拟机以便安装 VirtualBox?

go - 由于 "Authentication failed: EOF",Mesos 框架保持不活动状态

apache-kafka - 在 'Server' 中找不到名为 '/kafka/kafka_2.12-2.3.0/config/zookeeper_jaas.conf' 的 JAAS 配置节