如何在插入种子数据的情况下对 Apache ZooKeeper 进行 docker 化?

How can I dockerize Apache ZooKeeper with seed data inserted?

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

Docker文件

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

但这没有用,因为我试图在服务器启动和 运行ning 之前插入数据。

如何在启动时对具有种子数据的 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

Make sure you remove ./bin/zkServer.sh start-foreground from startup.sh and replace localhost with zookeeper in startup.sh.

然后只是 运行 docker-compose up 所以它将首先启动 zookeeper 服务然后它会 运行 zookeeper_setup 服务修改命令。 (确保在 zookeerper_setup 服务中使用 startup.sh 正确挂载目录)

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

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

另一种(可能更简单)方法是在后台启动 zookeeper,创建节点,停止 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