我试图部署3个Docker容器,它们之间有一个依赖关系(A – > B – > C)。 现在,每个容器都应该在JVM实例之上运行一个Akka-Spray实例。
问题是:按照通常的编排方法,容器A已经启动,但Web服务器没有时间启动。 如果在集装箱B运行之前没有运行,集装箱B将永远不能跟上,等等。
最近我一直在尝试以下方法:在容器之间共享数据量; 在web服务器准备好之后,一个助手脚本将在卷中创build一个空文件; 运行一个脚本(通过Upstart服务),查找一个空文件来显示并触发下一个容器。
但是,使用服务很可能是导致此问题的原因:正在运行
sudo docker run -d -it --name=backend -v ~/docker-test/:/docker-test -v ~/aux/:/aux ubuntu /bin/bash -c "</path/to/test/script>"
只需在命令行中完成,但在Upstart服务执行的脚本(接收消息"/bin/bash </path/to/test/script> : no such file or directory" )中随机失败。
任何人都会遇到这个呢? 我很感激欢迎任何build议来克服这一点。
为什么不看一个像flynn,deis,造船厂等专门build造的dockerpipe理员呢?
这里有一个列表
一种select是等到远程networking端口打开,这表明Web服务器已经启动。 下面的代码是基于SuperUser上的这个线程
#!/bin/sh SERVICE_IP=`sudo docker inspect -f \"{{.NetworkSettings.IPAddress}}\" $CONTAINER_NAME` SERVICE_PORT=80 while ! nc -vz \$SERVICE_IP \$SERVICE_PORT; do sleep 1; done
这可以与容器构build协调器(如果该协调器本身不支持等待“容器端口已经启动” – 我不知道在那个方向上有什么可用)相结合。