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

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

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


当前回答

只能删除停止的容器。一开始就阻止他们

Docker stop $(Docker ps -a -q)

然后你就可以移除

Docker rm $(Docker ps -a -q)

其他回答

移除所有容器:

sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty sudo docker rm -f

解释:

sudo docker ps -a

返回一个容器列表。

awk '{print $1}'

获取容器ID的第一列。

grep -v CONTAINER

删除标题。

最后一个管道将id安全地发送到sudo docker rm -f。

https://github.com/HardySimpson/docker-cleanup

码头工人清理

一个小的一体化外壳,它删除:

一天前没有运行的容器 不属于任何剩余容器的映像

打算作为crontab作业运行

功能

它将删除所有<none>:<none>图像 如果映像有多个repo:标签引用,它将删除所有的repo:标签,除非运行一个容器。实际上这是“docker rmi”的本质。 许多错误信息将显示在屏幕上,你可以决定2>/dev/null或不 从docker-gc中学到一些东西,并修复了它的问题(它不能删除有多个repo:标签的图像)

Bash的这两行代码会在删除容器之前通过一些关键字来过滤它们:

containers_to_keep=$(docker ps -a | grep 'keep\|Up\|registry:latest\|nexus' | awk '{ print $1 }')
containers_to_delete=$(docker ps -a | grep Exited | grep -Fv "$containers_to_keep" | awk '{ print $1 }')
docker rm $containers_to_delete

来自这篇文章。

在Ubuntu 14.04 (Trusty Tahr)上:

$ for CON in `docker ps -qa`; do docker rm $CON ; done

这只是一个普通的Bash命令,所以它应该适用于每个Bash兼容的终端。

如果你不喜欢删除所有的容器,你可以用docker ps -f before=<container- id >或用docker ps -f since=<container- id >选择在特定容器之前或之后创建的所有容器

假设您已经开发了您的系统,现在它正在工作,但是还剩下一些容器。您希望删除在该工作版本之前创建的容器。使用docker ps确定工作容器的ID。

删除在其他容器之前创建的容器

docker rm $(docker ps -f before=9c49c11c8d21 -q)

另一个例子。您已经在Docker容器上运行了数据库。您已经开发了在另一个容器上运行的应用程序,现在您有许多不需要的容器。

删除在某个容器之后创建的容器

docker rm $(docker ps -f since=a6ca4661ec7f -q)

Docker将容器存储在Ubuntu中的/var/lib/docker/containers中。我认为额外的容器没有其他危害,但会占用磁盘空间。