协慌网

登录 贡献 社区

如何删除旧的 Docker 容器

这个问题与我是否应该关注多余的,非运行的 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 prunedocker container prune 。请参阅VonC 的更新答案

上一个答案根据上面的几个不同提示,删除所有非运行容器的最优雅方法似乎是:

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

  • -q只打印容器 ID(没有列标题)
  • -f允许您过滤打印容器列表(在这种情况下,我们过滤只显示已退出的容器)