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