如何用docker-composeclosures一个依赖容器?
我有两个使用docker-compose旋转的容器:
web: image: personal/webserver depends_on: - database entrypoint: /usr/bin/runmytests.sh database: image: personal/database
在这个例子中,runmytests.sh是一个运行了几秒钟的脚本,然后返回一个零或非零的退出码。
当我用web_1
-compose运行这个设置时, web_1
运行脚本并退出。 database_1
保持打开状态,因为运行数据库的进程仍在运行。
当web_1的任务完成后,我想在database_1上触发一个优雅的退出。
您可以将--abort-on-container-exit
标志传递给--abort-on-container-exit
docker-compose up
让其他容器在退出时停止。
我不相信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
您所描述的内容称为Kubernetes中的Pod或AWS中的任务。 它是形成一个单元的一组容器。 Docker目前没有这个概念(Swarm模式有“任务”接近,但在这一点上它们只支持每个任务的一个容器)。
除了@BMitch描述的脚本之外,还有一个很好的解决办法。 您可以从主机挂载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首先closures数据库。 例如: docker kill database
。
编辑:第三个选项。 如果你想在一个失败的时候停止所有的容器,你可以在另一个答案中使用--abort-on-container-exit
选项将docker docker-compose
作为@dnephin提及。