如何在插入种子数据的情况下将Apache ZooKeeper停靠?

时间:2017-01-02 09:17:06

标签: apache-zookeeper dockerfile

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

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服务器停靠?

2 个答案:

答案 0 :(得分:3)

您可以利用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
  

确保从./bin/zkServer.sh start-foreground移除startup.sh,并将localhost替换为zookeeper中的startup.sh

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

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

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

答案 1 :(得分:0)

另一种(可能更简单)的方法是在后台启动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