这个问题与我是否应该关注过量的、未运行的Docker容器有关。

我想知道如何移除旧容器。docker rm 3e552code34a允许你删除一个,但我已经有很多了。Docker rm——help没有提供选择选项(像all一样,或者通过映像名称)。

也许有一个存放这些容器的目录,我可以很容易地手动删除它们?


当前回答

要摆脱停止的容器,您可以使用:

docker rm <cointainer_id>

你也可以使用容器的名称:

docker rm <name>

如果你想摆脱所有停止的容器,你可以使用:

docker container prune

或者你也可以用:

docker rm $(docker ps -aq -f status=exited)

您可以使用-v参数删除任何不再引用的docker管理卷

docker rm -v $(docker ps -aq -f status=exited)

您还可以在docker运行时使用——rm。这将在容器存在时删除容器和相关文件。

其他回答

从Docker 1.13开始。x你可以使用Docker容器修剪:

docker container prune

这将删除所有停止的容器,并且应该在所有平台上以相同的方式工作。

还有一个Docker系统修剪:

docker system prune

它将在一个命令中清理所有未使用的容器、网络、映像(悬空和未引用),以及可选的卷。


对于较旧的Docker版本,您可以将Docker命令与其他Unix命令串在一起以获得所需的内容。下面是一个关于如何清理几个星期前的旧容器的例子:

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

为了表示感谢,这个例子来自https://twitter.com/jpetazzo/status/347431091415703552。

删除从某个映像创建的所有容器:

docker rm  $(docker ps -a | awk '/myimage:mytag/{print $1}')
docker rm --force `docker ps -qa`

您可以使用多种方式删除容器,我将在后面的回答中解释它们。

码头集装箱修剪。该命令删除所有现在不工作的容器。您可以通过比较docker ps和docker ps -a的输出来找出哪些容器没有工作。docker ps -a中列出的但docker ps中不存在的容器现在没有工作,但它们的容器没有被删除。 Docker kill $(Docker ps -aq)。这个命令的作用是,通过执行$(docker ps -aq),它返回所有容器的id列表并杀死它们。有时此命令不起作用,因为正在运行的容器正在使用它。要做到这一点,你可以使用——force选项。 Docker rm $(Docker ps -aq)。它与第二个命令的定义相同。它们之间唯一的区别是它会删除容器(和docker prune一样),而docker kill不会。 有时需要删除映像,因为您更改了Dockerfile的配置,需要删除它来重新构建。为此,你可以通过运行docker images来查看所有的图像,然后复制你想要删除的图像的ID。只需执行docker image rm <image-id>即可删除。

PS:你可以用docker PS -a -q代替docker PS -aq,两者没有区别。因为在基于unix的操作系统中,您可以像上面的例子一样加入选项。

我建议你先停止图像,然后删除。

你可以这样说:

$ docker stop $(docker ps -a)
$ docker rm $(docker ps -a)