如何运行分离的容器并在退出时自动将其删除?

jch*_*ysk 37 docker

为什么Docker中的参数-d--rm冲突?

$ docker run -d --rm image
Conflicting options: --rm and -d
Run Code Online (Sandbox Code Playgroud)

我有许多运行单元/功能/集成测试的容器.Docker容器启动,运行测试,然后停止.因为我只关心结果,所以我将它们分开运行,但我也希望在容器退出后将容器移除.这样做有什么好办法?

小智 29

目前(Docker v1.1.1),不支持此功能.该--rm功能的开发人员在他的PR#1589中解释了原因:

仅当未提供-d时才支持它.自动删除通过docker run -d创建的容器没有意义.有两个原因可以通过这种方式实现:1)我们可能希望在删除容器之前检索某种退出状态或日志2)在当前体系结构中,在服务器端进行此运行很困难.

好消息是有人已经开了一个问题来解决这个问题,所以你可以在那里讨论.

此外,解决方法不是太复杂,您可以使用包装脚本运行容器,如下所示:

ID=$(docker run -d ubuntu sleep 3)
docker wait $ID
docker rm $ID
Run Code Online (Sandbox Code Playgroud)


jch*_*ysk 14

从Docker 1.13.0版开始,这些选项不再发生冲突

有一个pull请求可以移动--rm选项守护程序端,并允许使用remove选项运行分离的容器:https://github.com/docker/docker/pull/20848