连接到 ZooKeeper 图像容器和 运行 zookeeper 命令

Connect to ZooKeeper image container and run zookeeper commands

我通过 docker-compose 在 Docker 上 运行 宁 ZooKeeper 图片。

我的文件是:

--repo
----script.zk (contains zookeeper script commands such as `create`
----docker-compose.yaml
----Dockerfile.zookeeper
----zoo.cfg

docker-compose.yaml 包含名称和属性:

services:
  zoo1:
      restart: always
      hostname: zoo1
      container_name: zoo1
      build:
        context: .
        dockerfile: Dockerfile.zookeeper
      volumes:
       - $PWD/kyc_zookeeper.cfg:/conf/zoo.cfg
      ports:
          - 2181:2181
      environment:

      .... and two more nodes

Dockerfile.zookeeper 目前只包含图片

FROM zookeeper:3.4

我可以在本地 运行 zkCli.sh 并与 zookeeper 通信,但我希望在 Dockerfile.zookeeper 运行 时自动进行。

我是否需要使用虚拟机创建容器、安装 zookeeper 并将 zkCli.sh 复制到容器中以便 运行 命令?

或者是否可以通过 Dockerfile 运行 zookeeper 命令?

我也尝试过附加到容器并在 docker 文件中使用 CMD,但它不起作用。

知道我该怎么做吗?

谢谢

为了解决我写的 bash 脚本,谁得到 zookeeper 主机和 zookeeper 脚本(逐行包含 zookeeper 命令的文件)

和 运行 远程 docker 上包含 zookeeper 图像的所有命令:

config_script_file=""
zookeeper_host_url=""

#Retrieve all commands from file
    TMPVAR=""
    while read -r line
    do
        if [ -z "$TMPVAR" ]; then
            TMPVAR="$line"
        else
            TMPVAR="$TMPVAR\n$line"
        fi
    done < "$config_script_file"

#Run ZooKeeper commands on remote machine
docker exec -i $zookeeper_host_url bash << EOF
./bin/zkCli.sh -server localhost:2181
$(echo -e ${TMPVAR})
quit
exit
EOF

动物园管理员脚本示例:

create /x 1
create /y 2

用法:

./zkCliHelper.sh <zookeeper_url> <script.zk file>