【发布时间】:2018-03-24 22:48:41
【问题描述】:
我正在尝试将 Kafka 服务器容器化。 Kafka 服务器的正常启动顺序是这样的:
A: start Zookeeper server
B: start Broker server
C: create topic
项目A 和B 是长时间运行的进程。而C 需要等待B 启动并运行。
所以我写了一个 Dockerfile,ENTRYPOINT 为上述序列执行了一个 shell 脚本:
#!/bin/sh
$KAFKA_HOME/bin/zookeeper-server-start.sh $KAFKA_HOME/config/zookeeper.properties &
$KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties &
$KAFKA_HOME/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test_topic
但是,我在运行由此构建的 docker 镜像时遇到了三个问题:
- Docker 要求
ENTRYPOINT进程长时间运行,而上述脚本不需要。 (只要主题创建完成,它就会退出) - 代理服务器语句(第二条)是长时间运行的过程。目前我必须将它作为后台进程使用结束
&,否则它之后的语句根本不会执行。 (但是做后台也有问题:主题创建是立即执行的,而代理服务器还没有准备好。) - 我不能将代理服务器语句作为最后一个长时间运行的进程,因为主题创建语句必须在服务器创建之后。
安排这个启动顺序的好方法是什么?
【问题讨论】:
标签: bash shell docker apache-kafka dockerfile