连接到 ZooKeeper 映像容器并运行 Zookeeper 命令



我正在通过 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 命令?

我已经尝试过多地附加到容器并在 dockerfile 中使用 CMD,但它不起作用。

知道我该怎么做吗?

谢谢

为了解决这个问题,我写了bash脚本,谁得到动物园管理员主机和一个动物园管理员脚本(逐行使用zookeeper命令的文件)

并在包含 Zookeeper 镜像的远程 docker 上运行所有命令:

config_script_file="$2"
zookeeper_host_url="$1"
#Retrieve all commands from file
    TMPVAR=""
    while read -r line
    do
        if [ -z "$TMPVAR" ]; then
            TMPVAR="$line"
        else
            TMPVAR="$TMPVARn$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>

最新更新