我正在尝试为我的 API 启动一个 zookeeper 服务器和一个引导进程,另一个进程必须使用 docker-compose 将我的 API 写入的数据消耗到 zookeeper 服务器。
一旦我执行 docker-compose up,我的 zookeeper 服务器就会成功启动,并且我的 bootstrap API 能够连接到它并能够成功写入数据。
这里的限制是我的第二个进程需要等待我的 API 将数据写入 zookeeper,否则会导致异常,因为在此之前 API 不会创建任何节点。因此,在我的 docker-compose.ml 文件的命令部分,我执行了一个 bash 命令并通过添加一个 while 循环使我的引导 API 无限运行,这样程序就不会退出,并且还在我的第二个进程中添加了一个 sleep 语句以便它等到 API 完成其工作。(某种竞争条件处理)。
据我了解,docker-compose 使用 docker-compose.yml 文件中的“链接”处理排序,但不处理需要启动的各个进程的状态。我的意思是,一旦第一个进程成功退出,第二个进程就需要启动。
这是我的 docker-compose.yml 文件 -
zookeeper:
image: xyz.com/temp
ports:
- "10000:2181"
bootstrapapi:
image: xyz.com/temp1
command: /bin/bash -c "cd /code; make test_data ZK_HOSTS=zookeeper:2181 CLUSTER=cluster ; while [ true ]; do sleep 5; done"
volumes:
- .:/test
links:
- zookeeper
xyz:
image: def.com/temp2
command: /bin/bash -c "sleep 10;python -m test --zk-hosts=zookeeper:2181 --zk-cluster-path=cluster "
links:
- zookeeper
如果您需要更多详细信息,我很乐意让您知道。提前致谢。