docker-compose 中的多进程执行和排序问题

Multiple process execution and Ordering issues in docker-compose

我正在尝试为我的 API 启动一个 zookeeper 服务器和一个 bootstrap 进程,以及另一个必须使用 API 写入 zookeeper 服务器的数据的进程使用 docker-撰写。

一旦我执行 docker-compose up,我的 zookeeper 服务器就会成功启动,我的 bootstrap API 能够连接到它并成功写入数据。

这里的约束是我的第二个进程需要等待我的 API 将数据写入动物园管理员,否则会导致异常,因为 API 不会创建任何节点直到那时。因此,在我的 docker-compose.ml 文件的命令部分,我执行了一个 bash 命令并使我的 bootstrap API 运行 无限添加一个 while 循环,这样程序就不会退出,并且还在我的第二个进程中添加了一个 sleep 语句,以便它等到 API 完成它的工作。 (某种竞争条件处理)。

据我了解,docker-compose 使用 docker-compose.yml 文件中的 "links" 处理排序,但不处理单个进程的状态需要启动。我的意思是说,一旦第一个进程成功退出,第二个进程就需要启动。

这是我的 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

如果您需要更多详细信息,我们很乐意告诉您。提前致谢。

我解决问题的方法是在容器之间使用共享卷,其中第一个进程在完成它的工作后在这个卷上创建一个新文件,另一个进程运行一个循环来检查这个文件是否已经创建。一旦第二个进程检测到,它就会开始使用该数据的工作。

这是在 docker-compose 中使用 bash 脚本在 docker-compose 中解决这种生产者-消费者竞争条件场景的简单方法。希望这对您有所帮助。