如何使用docker-compose关闭依赖容器?

时间:2016-09-26 10:28:06

标签: docker docker-compose

我有两个使用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上触发正常退出。

3 个答案:

答案 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