我有两个使用docker-compose旋转的容器:
https://docs.google.com/viewer?url=yoururl.pdf
在此示例中,runmytests.sh是一个运行几秒钟的脚本,然后返回零或非零退出代码。
当我使用docker-compose运行此设置时,web:
image: personal/webserver
depends_on:
- database
entrypoint: /usr/bin/runmytests.sh
database:
image: personal/database
运行脚本并退出。 web_1
保持打开状态,因为运行数据库的进程仍在运行。
当web_1的任务完成时,我想在database_1上触发正常退出。
答案 0 :(得分:7)
您可以将--abort-on-container-exit
标记传递给docker-compose up
,以便其他容器在退出时停止。
答案 1 :(得分:3)
您所描述的内容在Kubernetes中称为Pod,在AWS中称为Task。它是一组形成一个单元的容器。 Docker当前没有这个概念(Swarm模式有“任务”接近,但此时它们只支持每个任务一个容器)。
除了@BMitch描述的脚本之外,还有一个hacky解决方法。您可以从主机安装Docker守护程序套接字。例如:
web:
image: personal/webserver
depends_on:
- database
volumes:
- /var/run/docker.sock:/var/run/docker.sock
entrypoint: /usr/bin/runmytests.sh
并将Docker客户端添加到您的personal/webserver
图片中。这将允许您的runmytests.sh脚本使用Docker CLI首先关闭数据库。例如:docker kill database
。
修改强>
第三种选择。如果您想在一个失败时停止所有容器,可以使用--abort-on-container-exit
选项docker-compose
作为@dnephin在另一个答案中提及。
答案 2 :(得分:2)
我不相信docker-compose支持这个用例。但是,制作一个简单的shell脚本很容易解决这个问题:
#!/bin/sh
docker run -d --name=database personal/database
docker run --rm -it --entrypoint=/usr/bin/runmytests.sh personal/webserver
docker stop database
docker rm database