如何自动删除链接的Docker容器?

如何自动删除链接的Docker容器?,docker,Docker,我有一个带有PHP的容器和一个带有MySQL数据库的链接容器,因为我需要能够使用数据库运行PHPUnit(集成测试) 基本命令如下所示: docker run -i --rm --link db binarydata/phpunit php script.php 我已经创建了db容器,并在运行此命令之前启动了它 binarydata/phpunit容器在命令运行后被删除。但是db容器保持正常运行 问题是:如何在链接容器上实现--rm功能,以便在执行命令后也将其删除 如何在链接容器上实现--rm

我有一个带有PHP的容器和一个带有MySQL数据库的链接容器,因为我需要能够使用数据库运行PHPUnit(集成测试)

基本命令如下所示:

docker run -i --rm --link db binarydata/phpunit php script.php
我已经创建了
db
容器,并在运行此命令之前启动了它

binarydata/phpunit
容器在命令运行后被删除。但是
db
容器保持正常运行

问题是:如何在链接容器上实现
--rm
功能,以便在执行命令后也将其删除

如何在链接容器上实现--rm功能,以便在执行命令后也将其删除

首先,docker 1.10+不再需要使用
--link
。所有容器都可以看到彼此。
使用,您可以将您的
二进制/phpunit
声明为“
db
”,以供其他容器使用

其次,在该网络就绪后,如果停止/删除php容器,它将从所述网络中删除,包括其别名“
db

这与旧的链接()不同,旧的链接()可能是需要它的容器的一部分。在这种情况下,删除链接容器实际上不会改变
/etc/hosts

随着时间的推移,不再需要这样做了

在注释中建议以下命令和注意事项:

docker compose up--在容器退出时中止--强制重新创建
,否则该命令将永远不会返回,
db
容器将永远不会被删除。
up
不过有点把stdout搞砸了。
测试的退出状态也将丢失,而是打印到屏幕上


您使用什么来启动测试?@Matt我使用的是PHPStorm,上面的命令被包装在一个shell脚本中,以使用该shell脚本作为php解释器,就像这里描述的那样:我忘了提到这个命令应该是一个一次性运行的shell脚本。我是否可以将
docker compose.yml
放在shell脚本旁边,并使用
docker compose run
而不是
docker run
。更准确地说,这将是docker compose。我猜PhpUnit组件将需要运行
run
,因此它位于前台,stdout出现。docker-compose应该负责这两个容器,在后台运行适当的docker。可能
docker compose up--在容器退出时中止--强制重新创建
,否则命令将永远不会返回,db容器也永远不会被删除<代码>向上会让标准输出有点混乱。测试的退出状态也将丢失,而是打印到屏幕上。