我希望使用Docker运行,并插入种子数据(用于测试配置)。我尝试使用启动脚本,如下所示:
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服务器进行对接?
发布于 2017-01-02 02:11:56
为此,您可以利用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
替换为startup.sh
中的zookeeper
。
然后运行docker-compose up
,这样它将首先启动zookeeper
服务,然后使用修改后的命令运行zookeeper_setup
服务。(确保在startup.sh
服务中使用zookeerper_setup
正确地挂载目录)
如果zookeeper
需要更多的时间来启动,您可以在startup.sh
中添加sleep 5
(或更多)。
下一次,当您不需要使用startup.sh
再次配置它时,您可以运行docker-compose up zookeeper
来启动预先配置的zookeeper
服务。
发布于 2018-09-20 01:13:33
另一种(可能更简单)方法是在后台启动动物园管理员,创建节点,停止动物园管理员,然后在前台模式下运行它。
你的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
https://stackoverflow.com/questions/41424007
复制