1

我想为我的API和另一个必须使用我的API将使用docker-compose写入zookeeper服务器的数据消耗的进程启动zookeeper服务器和引导进程。docker-compose中的多个进程执行和排序问题

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

这里的约束是我的第二个进程需要等待我的API将数据写入zookeeper,否则会导致一个异常,因为在此之前没有节点会被API创建。因此,在我的docker-compose.ml文件的命令部分中,我执行了一个bash命令,并通过添加一个while循环使我的引导API无限运行,以便程序不会退出,并在第二个进程中添加一个sleep语句以便它等到API完成其工作。 (种族条件处理)。

根据我的理解,docker-compose使用docker-compose.yml文件中的“链接”处理排序,但不处理需要启动的单个进程的状态。按照我的意思,第一个进程退出成功后,第二个进程需要启动。

这里是我的搬运工,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 

如果您需要任何更多的细节,我会很高兴,让你知道。提前致谢。

回答

0

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

这是一个解决docker-compose中使用bash脚本的docker-compose中生产者 - 消费者竞争条件场景的简单方法。希望这可以帮助。