【发布时间】:2016-05-17 09:23:12
【问题描述】:
我有一系列由 docker-compose 启动的容器。具体来说,它们是多个 Zookeeper 容器:
zk1:
image: seven10/zookeeper:3.4.6
container_name: zk1
hostname: zk1
restart: always
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
environment:
- ZOOKEEPER_ID=1
net: ${MY_NETWORK_NAME}
volumes:
- /seven10/zk/zk1/data:/opt/zookeeper-3.4.6/data
zk2:
image: seven10/zookeeper:3.4.6
container_name: zk2
restart: always
hostname: zk2
ports:
- "2182:2181"
- "2889:2888"
- "3889:3888"
environment:
- ZOOKEEPER_ID=2
net: ${MY_NETWORK_NAME}
volumes:
- /seven10/zk/zk2/data:/opt/zookeeper-3.4.6/data
zk3:
image: seven10/zookeeper:3.4.6
container_name: zk3
hostname: zk3
restart: always
ports:
- "2183:2181"
- "2890:2888"
- "3890:3888"
environment:
- ZOOKEEPER_ID=3
net: ${MY_NETWORK_NAME}
volumes:
- /seven10/zk/zk3/data:/opt/zookeeper-3.4.6/data
所以当我启动容器时,zk1 在开始时给了我这个警告:
WARN [WorkerSender[myid=1]:QuorumCnxManager@382] - Cannot open channel to 3 at
election address zk3:3888
java.net.UnknownHostException: zk3
但几秒钟后就没有再说关于 zk3 的任何其他内容了。 但是,zk1 连续给 zk2 报以下错误:
2016-02-18 15:28:57,384 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:Learner@233] - Unexpected exception, tries=0, connecting to zk2:2888
java.net.UnknownHostException: zk2
zk2 没有说任何关于 zk1 的信息,但简单地抱怨 zk3 的“无法打开通道”错误。 zk3 并不是每次都提到 zk1 或 zk2。
所以最大的问题是 zk1 永远找不到 zk2。它只是向日志发送垃圾邮件并拒绝来自 kafka 的连接。为什么会这样?我应该如何解决这个问题?
我的开发盒在 ubuntu 14.04 上使用 docker 1.9.1 版和 docker-compose 1.5.1 版(我认为是 Mint Rafello?),尽管目标环境是 ubuntu 15.10。
【问题讨论】:
-
它似乎只在我每隔一次运行它时才会发生。当我删除所有容器和数据并重新启动它时,一切正常。如果我再次执行该过程,它将不起作用。就是这样。
-
其实有一次它起作用的原因是因为zk1被选为leader。当 zk1 不是领导者时,它会失败。
标签: apache-zookeeper docker-compose