停止并删除所有 docker 容器

Posted

技术标签:

【中文标题】停止并删除所有 docker 容器【英文标题】:Stop and remove all docker containers 【发布时间】:2018-01-03 14:17:20 【问题描述】:

如何停止和删除所有 Docker 容器以使用我的 Docker 容器创建一个干净的状态?很多时候我觉得从头开始更容易,但是我有一堆容器我不确定它们的状态是什么,然后当我运行 docker rm 它不会让我因为 docker 容器仍然可以正在使用中。

【问题讨论】:

How to remove old Docker containers的可能重复 是的,我不确定它是否重复。您发布的那个问题是关于删除旧容器,而我想知道的是如何删除所有内容,无论它有多旧。但是有def重叠。 链接的问题肯定要求旧容器,但该解决方案适用于您指定的任何容器。因此,您可以根据您的情况调整其他解决方案 【参考方案1】:

停止所有容器

docker stop $(docker ps -a -q)

删除所有容器

docker rm $(docker ps -a -q)

查找更多命令here

【讨论】:

未知速记标志:'a' in -a 终于!有人拥有适用于 Windows 且没有错误的命令! > 注意:我在 Git Bash 中运行了这些命令!!!【参考方案2】:

Docker 引入了新的命名空间和命令,每个人最终都应该学习而不是固守旧习惯。这里是documentation,下面是一些例子:

删除不再需要的容器(已停止)

docker container prune

删除不再需要的图片

这意味着它只删除未标记且未由“最新”指向的图像 - 因此不会删除您可以经常使用的真实图像

docker image prune

删除所有现有容器未使用的卷

(即使是停止的容器也确实要求容量)。这通常会清理很久以前已删除的悬空容器。它不应该删除命名卷,因为它们的容器应该存在/正在运行。 请注意,在使用这个之前,请确保您的堆栈至少正在运行

docker volume prune

未使用的网络也一样

docker network prune

最后,如果您想清除所有垃圾 - 为了确保您的生产不会发生任何事情,请确保所有堆栈都在运行,然后运行

docker system prune

【讨论】:

docker system prun 到最后缺少 e IMO docker system prune 是这个问题的真正答案【参考方案3】:
docker ps -aq | xargs docker stop | xargs docker rm

docker ps -aq | xargs docker rm -f

【讨论】:

请提供您为用户提到的 docker 命令的简要详细信息。详细信息总是有帮助的,尤其是对学生和初级开发人员。【参考方案4】:

我们可以用一个衬垫来实现这一点(也可以移除正在运行的容器)

docker container rm $(docker container ls -aq) -f

它的作用

docker container ls -aq 仅列出容器的 ID

docker container rm $(..) -f 强制删除所有容器的 id

【讨论】:

【参考方案5】:

这是我用于此类事情的一个很好的要点: 从这个人们似乎不喜欢的链接(https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430)

删除卷

$ docker volume rm $(docker volume ls -qf dangling=true)
$ docker volume ls -qf dangling=true | xargs -r docker volume rm

删除网络

$ docker network ls  
$ docker network ls | grep "bridge"   
$ docker network rm $(docker network ls | grep "bridge" | awk '/ /  print $1 ')

删除泊坞窗图像

// 见:http://***.com/questions/32723111/how-to-remove-old-and-unused-docker-images

$ docker images
$ docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
$ docker images | grep "none"
$ docker rmi $(docker images | grep "none" | awk '/ /  print $3 ')

移除 docker 容器

// 见:http://***.com/questions/32723111/how-to-remove-old-and-unused-docker-images

$ docker ps
$ docker ps -a
$ docker rm $(docker ps -qa --no-trunc --filter "status=exited")

基本上你想杀死所有正在运行的容器,删除每个图像,卸载 docker,重新安装你想要的版本,并且应该尽可能干净。

【讨论】:

能否请您发布命令,而不仅仅是指向要点的链接?这将极大地帮助那些无法点击您的链接的用户从您的回答中受益。此外,有一天该链接可能会损坏,您的答案会变得不那么有用 谢谢你,删除了我的DV 一切都好。只是想回馈社区,我以前从未真正回答过这些问题。我猜所有的开发者都会在某个时候感受到这种召唤? 太棒了@Chris 帮助别人真的很光荣,同时也是一个加强你对该主题知识的好机会,因为有时写答案会让你了解更多关于该主题或清除一些旧的你有疑问。请记住,您的答案应该很清楚,并考虑这样的方面,这是 SO 中良好答案所必需的 由于大量过时而被否决。不需要过滤器 dangling=true 任何,修剪在这里【参考方案6】:

一个班轮:

docker rm -f $(docker ps -a -q)

如果你只想做正在运行的,删除-a

【讨论】:

【参考方案7】:

如果您担心 shellcheck SC2046(在这种情况下,您将收到命令 docker stop $(docker ps -a -q) 的警告)并且您正在使用 Bash4+(以便能够使用 mapfile 内置命令),您可以运行以下停止所有容器:

mapfile -t list < <(docker ps -q)
[[ $#list[@] -gt 0 ]] && docker container stop "$list[@]"

推理:

docker ps -q 返回所有活动容器 ID

mapfile 将生成的容器 ID 存储在 list 数组中

[[ $#list[@] -gt 0 ]] 测试 list 数组是否有 1 个或多个元素来执行下一个命令

docker container stop "$list[@]" 停止其 id 存储在 listarray 中的所有容器(仅当数组有项目时才会运行)

同样,移除所有停止的容器:

mapfile -t list < <(docker ps -aq)
[[ $#list[@] -gt 0 ]] && docker container rm "$list[@]"

docker ps -aq 返回所有容器 id,甚至来自停止的容器)

如果要停止和移除所有容器,可以依次运行上述命令(首先是stop,然后是rm)。

或者,您可以只运行带有rm --force 的删除容器的命令,但请记住,这将发送SIGKILL,因此建议先运行stop,然后运行rm (stop发送SIGTERM,除非超时,在这种情况下它发送SIGKILL)。

【讨论】:

那是为了容纳容器名称中的空格? @kjones 如果您使用 shellcheck,您会收到带有未引用 $() 的警告,因为“当命令扩展未引用时,将发生分词和通配”。在 docker container ids 的情况下没有这样的问题,所以你可以禁用规则,但如果你不想禁用规则,你可以使用我发布的替代方式。它做同样的事情,虽然有更多的代码,所以你可能更喜欢docker stop $(docker ps -a -q),但如果有替代方案,我会尽量避免使用非转义引号,即使我知道在这种特定情况下没有问题。 我明白了,谢谢你的后续解释【参考方案8】:

停止容器:

docker stop container1_id container2_id containerz_id 

删除所有图片:

docker system prune --all

【讨论】:

【参考方案9】:

然后当我运行 docker rm 时它不会让我运行,因为 docker 容器可能仍在使用中。

我建议的步骤如下, 1.尝试删除

docker rm <container-id>

2。 rm 不起作用,使用 stop

docker stop <container-id>

3。停止不起作用?尝试杀死

docker kill <container-id>

4。停止工作,但容器还在吗?尝试 prune 强制删除所有停止的容器

docker container prune -f

【讨论】:

【参考方案10】:

删除所有 Docker 镜像:

docker rmi $(docker images -aq)

【讨论】:

【参考方案11】:

在 ubuntu 中,当其他解决方案不起作用时,我只是杀死了所有进程。

$ ps aux | grep docker
$ sudo kill enter process id here

我不建议这样做。我正在重新安装你的操作系统时,这些命令节省了一些时间来解决我的容器问题。

【讨论】:

如果你想停止/删除匹配的容器:docker ps | grep 'localstack\|postgres' | awk '打印 $1' | xargs docker rm -f

以上是关于停止并删除所有 docker 容器的主要内容,如果未能解决你的问题,请参考以下文章

删除所有的docker容器和镜像

Docker:停止并删除 docker 容器(如果它正在运行)

Docker Review - docker 容器 常用命令

Docker容器使用

如何批量删除Docker中已经停止的容器

text 停止/删除所有Docker容器