Docker 时 Zookeeper 集群模式出错?

Error on Zookeeper cluster mode with Docker?

我正在尝试在不同的主机上使用 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

代码添加自: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.

暴露端口的左边部分是主机的本地端口,只能使用一次。此外,容器互连不需要暴露端口,因为它们在同一个网络中。

所以删除左边的部分2888:2888,保留为:2888,然后docker会在主机中找到一个空闲端口(使用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