如何移除旧的Docker容器

1455
这个问题涉及到是否应该担心不需要的未运行 Docker 容器?
我想知道如何删除旧的容器。使用docker rm 3e552code34a可以删除一个容器,但是我已经有很多了。docker rm --help没有提供选择选项(例如全部或按镜像名称)。
也许有一个目录存储这些容器,我可以手动轻松删除它们吗?

23
你也应该考虑清理孤立的Docker数据卷。我经常发现它们占用的空间比旧容器和旧镜像还要多。一个好的脚本可以帮助你删除这些孤立的Docker数据卷,你可以从这里获取:https://github.com/chadoe/docker-cleanup-volumes。 - Nemanja Trifunovic
也许 https://github.com/chadoe/docker-cleanup-volumes 可以帮助你。 - Mihai8
14
在Docker 1.13(2016年第四季度)中,您还可以考虑使用新的docker system prune命令。请参见我的下面的回答 - VonC
@VonC 这在我的 Docker version 1.12.3, build 6b644ec 上没有用 :) - ReynierPM
1
使用Docker管理工具Portainer我们可以使用这个工具来管理所有旧的容器、未使用的卷和镜像它是一个简单的Docker管理UI请参考下面我的更新,了解如何部署应用程序 - Anish Varghese
显示剩余2条评论
67个回答

6
  1. Remove all docker processes:

    docker rm $(docker ps -a -q)
    
  2. Remove specific container:

    $ docker ps -a (lists all old containers)
    
    $ docker rm container-Id
    

5
您可以使用以下命令来删除已退出的容器:
docker rm $(sudo docker ps -a | grep Exit | cut -d ' ' -f 1)

这里是完整的要删除docker旧镜像的代码片段:删除旧Docker容器和镜像的代码片段


5

我想补充这个简单的答案,因为我没有看到它,而且问题具体是“旧”而不是“所有”。

sudo docker container prune --filter "until=24h"

根据需要删除比此时间旧的容器,可调整24h的时间跨度。


4
#!/bin/bash
# docker-gc --- Remove stopped docker containers

RUNNING=$(docker ps -q)
ALL=$(docker ps -a -q)

for container in $ALL ; do
    [[ "$RUNNING" =~ "$container" ]] && continue
    echo Removing container: $(docker rm $container)
done

针对那些不想自己搜索的人:https://github.com/spotify/docker-gc - grim
很完美。我还写了一个具有相同功能的答案。 - Mostafa Ghadimi

4

您只能删除已停止的容器。在开始之前停止所有容器。

docker stop $(docker ps -a -q)

然后您就可以删除它们了

docker rm $(docker ps -a -q)


4

尝试使用此命令清理容器和悬空镜像。

docker system prune -a

这是一个惊人的专业技巧! - b01

3

我正在使用以下命令来删除已退出重新启动的docker容器

docker stop --force $(docker ps -a|grep Exited| awk '{print $1}')
docker rm --force $(docker ps -a|grep Exited| awk '{print $1}')
docker stop --force $(docker ps -a|grep Restarting| awk '{print $1}')
docker rm --force $(docker ps -a|grep Restarting| awk '{print $1}')

使用以下命令删除名称为none的镜像
docker image rm --force $(docker image ls  |grep none |awk '{print $3}')

3
我经常使用docker rmi $(docker ps -a -q)来删除所有镜像。
docker rmi失败时,您可以删除目录/var/lib/docker/graph

感谢您添加 /var/lib/docker/graph 信息。 - Jonathan DeMarks
问题是如何删除容器,而不是镜像。 - pauk960

3

停止/删除所有容器和镜像的基本步骤

  1. 列出所有容器

    docker ps -aq

  2. 停止所有运行中的容器

    docker stop $(docker ps -aq)

  3. 删除所有容器

    docker rm $(docker ps -aq)

  4. 删除所有镜像

    docker rmi $(docker images -q)

注意:在删除之前,需要先停止所有正在运行的容器。在删除镜像之前,必须停止并删除其依赖的容器。


3
为了删除所有已停止的Docker容器,请运行以下命令:-
$ docker container prune

请注意,此命令会不加区分地删除所有已停止的容器,因此请确保没有您仍然需要使用的已停止/未使用的容器。

更精准的方法是按ID删除容器。您需要先使用以下命令列出已停止的容器:

docker ps --filter "status=exited"

您需要先复制要删除的容器的ID。然后执行以下命令来删除单个容器:

docker container rm <container ID>

或者使用以下方法一次性删除多个容器:

docker container rm <container ID 1> <container ID 2> <container ID n>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接