Apache zookeeper 插入种子数据后,如何将Apache ZooKeeper归档?

Apache zookeeper 插入种子数据后,如何将Apache ZooKeeper归档?,apache-zookeeper,dockerfile,Apache Zookeeper,Dockerfile,我想使用Docker运行ApacheZooKeeper,并插入种子数据(用于测试配置)。我尝试使用如下启动脚本: Dockerfile FROM zookeeper:latest ADD startup.sh . EXPOSE 2181 CMD ["./startup.sh"] startup.sh #!/bin/sh ./bin/zkCli.sh -server localhost:2181 create /foo "" ./bin/zkCli.sh -server localhost:

我想使用Docker运行ApacheZooKeeper,并插入种子数据(用于测试配置)。我尝试使用如下启动脚本:

Dockerfile

FROM zookeeper:latest

ADD startup.sh .
EXPOSE 2181
CMD ["./startup.sh"]
startup.sh

#!/bin/sh

./bin/zkCli.sh -server localhost:2181 create /foo ""
./bin/zkCli.sh -server localhost:2181 create /foo/bar ""

./bin/zkServer.sh start-foreground
但这不起作用,因为我试图在服务器启动和运行之前插入数据


如何将启动时具有种子数据的ZooKeeper服务器docker化?

您可以利用
docker compose
实现此目的

docker compose.yml

version: '2'

services:
   zookeeper:
     image: zookeeper:latest
     restart: always
     ports:
       - "2181:2181"
   zookeeper_setup:
     image: zookeeper:latest
     depends_on:
       - zookeeper
     links:
       - zookeeper
     command: sh /setup/startup.sh
     volumes:
       - ./:/setup
确保从
startup.sh
中删除
/bin/zkServer.sh start front
,并在
startup.sh
中将
localhost
替换为
zookeeper

然后只需运行
docker compose up
,它将首先启动
zookeer
服务,然后使用修改后的命令运行
zookeer\u setup
服务。(确保您在
zookeerper\u设置
服务中使用
startup.sh
正确装载目录)

如果
zookeeper
需要更多时间启动,您可以在
startup.sh
中添加
sleep 5
(或更多)

下次,当您不需要使用
startup.sh
再次配置它时,您可以运行
docker compose up zookeer
来启动预配置的
zookeer
服务。

另一种方法(可能更简单)是在后台启动zookeer,创建节点,停止zookeeper,然后在前台模式下运行它

您的
startup.sh
可能类似于-

./bin/zkServer.sh start
./bin/zkCli.sh -server localhost:2181 create /foo ""
./bin/zkServer.sh stop
echo "Starting Zookeeper in foreground mode..."
./bin/zkServer.sh start-foreground