这个问题与我是否应该关注多余的,非运行的 Docker 容器有关? 。
我想知道如何删除旧容器。 docker rm 3e552code34a
允许您删除一个,但我已经有很多。 docker rm --help
不提供选择选项(如全部或图像名称)。
也许有一个存储这些容器的目录,我可以手动轻松删除它们?
有一个新的功能, 泊坞窗 1.13.x称为泊坞容器修剪 : docker container prune
这将做你想要的,并且应该以相同的方式在所有平台上工作。
还有一个Docker 系统修剪 : docker system prune
,它将在一个命令中清理容器,图像,卷和网络。
原答案:
有一些关于 Docker 清理命令的讨论。您可以在此票证中找到相关信息: 实施 “清洁” 命令 (#928)
在该命令可用之前,您可以将 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 。
我从 Guillaume J. Charmes 获得的另一种方法(信用到期):
docker rm `docker ps --no-trunc -aq`
将以优雅的方式移除所有容器。
对于 Windows,由 Bartosz Bilicki 撰写:
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
对于 PowerShell:
docker rm @(docker ps -aq)
使用 Docker 1.13(2016 年第 4 季度)的更新,归功于VonC ( 本主题后面的内容 ):
docker system prune
将删除所有未使用的数据(即按顺序:容器停止,没有容器的卷和没有容器的图像)。
请参阅PR 26108并提交 86de7c0 ,它们引入了一些新命令,以帮助显示 Docker 守护程序数据在磁盘上占用的空间,并允许轻松清理 “不需要的” 多余空间。
docker system prune
WARNING! This will remove:
- all stopped containers
- all volumes not used by at least one container
- all images without at least one container associated to them
Are you sure you want to continue? [y/N] y
更新的答案立即使用docker system prune
或docker container prune
。请参阅VonC 的更新答案 。
上一个答案根据上面的几个不同提示,删除所有非运行容器的最优雅方法似乎是:
docker rm $(docker ps -q -f status=exited)
-q
只打印容器 ID(没有列标题) -f
允许您过滤打印容器列表(在这种情况下,我们过滤只显示已退出的容器)