我该如何停止并删除所有 Docker 容器,以便在 Docker 中创建全新的环境?很多时候,我觉得从头开始更容易,但我的许多容器状态我都不确定,当我运行 docker rm
时,它会提示拒绝访问,因为 Docker 容器可能仍在使用中。
我该如何停止并删除所有 Docker 容器,以便在 Docker 中创建全新的环境?很多时候,我觉得从头开始更容易,但我的许多容器状态我都不确定,当我运行 docker rm
时,它会提示拒绝访问,因为 Docker 容器可能仍在使用中。
注意:我是在Git Bash中运行这些命令的!- John
-a
标志。docker ps 仅会列出正在运行的容器。 - meni181818xargs
来处理这两个命令,因为如果 docker ps -a -q
列出的容器为空,运行任何一个命令都会失败,因为你没有给它任何参数。而使用 xargs
将不会调用该命令。 - HakanaiDocker引入了新的命名空间和命令,每个人都应该学习并不再坚持旧的习惯。这是文档,这里有一些示例:
删除不再需要的容器(已停止)
docker container prune
删除不再需要的图片
这意味着,它仅删除未标记且没有被“latest”指向的图像 - 因此不会删除您通常可以使用的真实图像。
docker image prune
删除所有未被任何现有容器使用的卷
(即使已停止的容器也会声明卷)。这通常会清理掉很久以前已删除的容器的悬空匿名卷。它不应该删除命名卷,因为这些卷所属的容器应该存在/正在运行。 请注意,在执行此操作之前,请确保您的堆栈至少正在运行。
docker volume prune
未使用的网络同样适用
docker network prune
最后,如果您想清除所有垃圾 - 确保生产不受任何影响,请确保所有的堆栈都在运行,然后运行
docker system prune
docker system prun
towards last is missing an e
- Ayushyadocker stop $(docker ps -q)
以优雅地停止它们,或者如果有一些不想停止的“叛逆”容器,则执行 docker kill $(docker ps -q)
。 - Mariano Ruizdocker ps -aq | xargs docker stop | xargs docker rm
或者
docker ps -aq | xargs docker rm -f
docker ps -aq
docker ps -a
或docker ps --all
返回所有容器,而不仅仅是正在运行的容器docker ps -q
或docker ps --quiet
返回容器IDdocker rm -f
或docker rm --force
也会删除正在运行的容器
一个命令行清理所有容器
docker system prune -f ; docker volume prune -f ;docker rm -f -v $(docker ps -q -a)
简单来说:
docker rm -f $(docker ps -a -q)
-a
。docker container rm $(docker container ls -aq) -f
它是做什么的
docker container ls -aq
仅列出容器ID
docker container rm $(..) -f
强制删除所有容器ID
$ 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 }')
删除Docker镜像
// 参考: https://dev59.com/NlwY5IYBdhLWcg3wWWq0
$ 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 容器
// 参考: https://dev59.com/NlwY5IYBdhLWcg3wWWq0
$ docker ps
$ docker ps -a
$ docker rm $(docker ps -qa --no-trunc --filter "status=exited")
您希望停用正在运行的所有容器,删除每个镜像,卸载Docker,重新安装所需版本,那么这应该是最干净的状态了。
停止容器:
docker stop container1_id container2_id containerz_id
删除所有图片:
docker system prune --all
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[@]}"
停止所有已在 list
数组中存储其ID的容器(仅在数组有项目时运行)
同样地,要删除所有已停止的容器:
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)。
$()
的警告。在docker容器ID的情况下,没有这样的问题,因此您可以禁用该规则,但是如果您不想禁用该规则,则可以使用我发布的替代方法。它做同样的事情,尽管有更多的代码,所以您可能更喜欢只使用docker stop $(docker ps -a -q)
,但是如果有替代方案,即使我知道在这种特定情况下没有问题,我也会尝试避免未转义的引号。 - Lucas Basquerotto删除所有 Docker 镜像:
docker rmi $(docker images -aq)