停止并删除所有docker容器

时间:2017-07-27 17:50:00

标签: docker

使用Docker容器创建干净的平板的最佳方法是什么?很多次我觉得从头开始更容易,但我有一堆容器,我不确定他们的状态是什么,然后当我运行docker rm它不会让我因为码头工人容器仍然可以使用。

10 个答案:

答案 0 :(得分:9)

Docker引入了新的命名空间和命令,每个人都应该学习,而不是坚持旧的习惯。

  

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

$ docker container prune

  

删除不再需要的图像

这意味着,它只会删除未标记且未被“最新”指向的图像 - 因此不会删除您经常使用的真实图像 $ docker image prune

  

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

(甚至停止的容器确实声称数量)。这通常可以清理悬空的容器 - 很久以前就已经删除了容器。它永远不应该删除命名卷,因为它们的容器应该存在/正在运行。 小心,确保您的堆栈至少在运行之前已经运行 docker volume prune

  

未使用的网络相同

docker network prune

最后,如果你想要摆脱所有的垃圾 - 确保你的作品没有发生任何事情,请确保所有堆栈都在运行然后运行

docker system prune

答案 1 :(得分:6)

停止所有容器

docker stop $(docker ps -a -q)

删除所有容器

docker rm $(docker ps -a -q)

查找更多命令here

答案 2 :(得分:3)

这是我用于此类事情的好主意: 从这个人们似乎不喜欢的链接(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://stackoverflow.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 }')

删除泊坞窗容器

//参见:http://stackoverflow.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,重新安装你想要的版本,这应该是一个干净利落的版本。

答案 3 :(得分:3)

docker ps -aq | xargs docker stop | xargs docker rm

docker ps -aq | xargs docker rm -f

答案 4 :(得分:3)

我们可以用一个衬里实现这一目标(也可以删除运行中的容器)

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

它做什么

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

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

答案 5 :(得分:1)

一个班轮:

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

如果只想运行,请删除-a

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

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

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

docker rm <container-id>

2。 rm不起作用,请使用stop

docker stop <container-id>

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

docker kill <container-id>

4。停止工作,但仍然有集装箱吗?尝试修剪以强行删除所有已停止的容器

docker container prune -f

答案 8 :(得分:0)

如果您担心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存储在list数组中的容器(仅在该数组包含项的情况下运行)

类似地,要删除所有停止的容器:

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

({docker ps -aq会返回所有容器ID,甚至从停止的容器中返回)

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

或者,您只能运行命令以rm --force删除容器,但是请记住,这将发送SIGKILL,因此先运行stop,然后再运行{{1 }}是可取的(rm发送SIGTERM,除非它超时,在这种情况下它会发送SIGKILL)。

答案 9 :(得分:0)

停止容器:

docker stop container1_id container2_id containerz_id 

删除所有图片:

docker system prune --all