Docker的Zookeeper群集模式出错?

Docker的Zookeeper群集模式出错?,docker,docker-compose,apache-zookeeper,Docker,Docker Compose,Apache Zookeeper,我正在尝试在不同的主机上使用docker部署zookeeper集群。我使用下一个docker compose,其中我在host1中运行zoo1,在host2中运行zoo2,在host3中运行zoo3 version: '2' services: zoo1: image: 31z4/zookeeper restart: always ports: - 2181:2181 - 2888:2888

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

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
代码是从以下位置添加的:

我只是尝试使用下一个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.

暴露端口的左侧是主机的本地端口,只能使用一次。此外,您不需要为容器互连公开端口,因为它们位于同一网络中

因此,移除左侧部分
2888:2888
,保持原样:
2888
,然后docker将在主机中找到一个空闲端口(使用
docker ps
查找它)。如果不需要公开端口,也可以直接删除
端口
指令

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

问题是什么还不清楚。有关什么是好问题的详细信息,请参见和。@HoriaComan Thank刚刚编辑过真的谢谢,但我只是在不同的主机上使用了它,所以这些端口是免费的,最后在运行几分钟后就可以工作了。