连接到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运行时自动执行。

我是否需要用vm创build容器,安装zookeeper并将zkCli.sh复制到容器中以运行命令?

或者有可能通过Dockerfile运行zookeeper命令?

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

任何想法我怎么能做到这一点?

谢谢

为了解决,我写了bash脚本,谁得到zookeeper主机和zookeeper脚本(文件与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="$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 

动物园pipe理员脚本的示例:

 create /x 1 create /y 2 

用法:

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