这个问题与我是否应该关心多余的,非运行的,Docker容器有关?。
我在想怎么把旧容器搬走。Docker RM3e552code34a
允许您删除一个,但是我已经有很多了。DockerRM--help
不提供选择选项(与所有选项一样,也不提供图像名称)。
也许有一个目录存储这些容器,我可以很容易地手动删除它们?
从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。
另一个方法,我从Guillaume J.Charmes那里得到的(功劳在哪里):
docker rm `docker ps --no-trunc -aq`
将以优雅的方式移除所有容器。
Bartosz Bilicki为Windows:
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系统修剪
将删除所有未使用的数据(即,按顺序:容器已停止,没有容器的卷和没有容器的映像)。
请参阅PR 26108和commit86de7c0,它们引入了一些新命令,以帮助可视化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系统修剪
或Docker容器修剪
。见Vonc更新的答案。
前面的答案综合了上面几个不同的提示,移除所有非运行容器的最优雅的方法似乎是:
docker rm$(docker ps-q-f status=exited)
-q
只打印容器ID(不带列标题)-f
允许您筛选打印容器列表(在本例中,我们正在筛选以仅显示已退出的容器)