Docker的Zookeeper集群模式出错?

我正在尝试在不同主机上使用docker部署一个zookeeper集群。 我使用下一个docker-compose,在host2的host1 zoo2和host3的zoo3中运行zoo1。

version: '2' services: zoo1: image: 31z4/zookeeper restart: always ports: - 2181:2181 - 2888:2888 - 3888:3888 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=host1-IP:2888:3888 server.2=host2-IP:2888:3888 server.3=host3-IP:2888:3888 zoo2: image: 31z4/zookeeper restart: always ports: - 2182:2181 - 2888:2888 - 3888:3888 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=host1-IP:2888:3888 server.2=host2-IP:2888:3888 server.3=host3-IP:2888:3888 zoo3: image: 31z4/zookeeper restart: always ports: - 2183:2181 - 2888:2888 - 3888:3888 environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=host1-IP:2888:3888 server.2=host2-IP:2888:3888 server.3=host3-IP:2888:3888 

代码是从https://github.com/31z4/zookeeper-docker添加的

我只是尝试下一个docker-compose,并将zoo1,zoo2和zoo3添加到/ etc / hosts文件中:

 version: '2' services: zoo1: image: 31z4/zookeeper restart: always ports: - 2181:2181 - 2888:2888 - 3888:3888 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 zoo2: image: 31z4/zookeeper restart: always ports: - 2182:2181 - 2888:2888 - 3888:3888 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zooo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 zoo3: image: 31z4/zookeeper restart: always ports: - 2183:2181 - 2888:2888 - 3888:3888 environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 

但是,如果我检查状态,这是行不通的:

 ./bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /conf/zoo.cfg Error contacting service. It is probably not running. 

展示端口的左侧部分是主机的本地端口,只能使用一次。 另外,您不需要公开端口来进行容器互连,因为它们在同一个networking中。

因此,删除左边的部分2888:2888 ,将其保留为: 2888 ,然后docker将在主机中find一个空闲端口(使用docker ps来查找它)。 或者如果你不需要暴露端口,直接删除ports指令。

 version: '2' services: zoo1: image: 31z4/zookeeper restart: always ports: - 2181 - 2888 - 3888 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 zoo2: image: 31z4/zookeeper restart: always ports: - 2181 - 2888 - 3888 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 zoo3: image: 31z4/zookeeper restart: always ports: - 2181 - 2888 - 3888 environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888