这个问题与我是否应该关注过量的、未运行的Docker容器有关。

我想知道如何移除旧容器。docker rm 3e552code34a允许你删除一个,但我已经有很多了。Docker rm——help没有提供选择选项(像all一样,或者通过映像名称)。

也许有一个存放这些容器的目录,我可以很容易地手动删除它们?


当前回答

我想加上这个简单的答案,因为我没有看到它,这个问题是“老”而不是“全部”。

Sudo docker容器修剪-filter“until=24h”

根据您想要移除的容器的时间跨度调整24h。

其他回答

我建议你先停止图像,然后删除。

你可以这样说:

$ docker stop $(docker ps -a)
$ docker rm $(docker ps -a)

为了简单地删除当前未被运行容器使用的所有内容,我通常将以下别名放入我的Mac上的.bash_profile中,这将有所帮助:

alias dockerclean="docker ps -q -a | xargs docker rm -v && docker images -q | xargs docker rmi"

无论何时从命令行调用dockerclean,它都会删除停止的容器以及未使用的映像层。对于正在运行的容器和已使用的映像,它将打印一条警告消息并跳过它。

如果你不喜欢删除所有的容器,你可以用docker ps -f before=<container- id >或用docker ps -f since=<container- id >选择在特定容器之前或之后创建的所有容器

假设您已经开发了您的系统,现在它正在工作,但是还剩下一些容器。您希望删除在该工作版本之前创建的容器。使用docker ps确定工作容器的ID。

删除在其他容器之前创建的容器

docker rm $(docker ps -f before=9c49c11c8d21 -q)

另一个例子。您已经在Docker容器上运行了数据库。您已经开发了在另一个容器上运行的应用程序,现在您有许多不需要的容器。

删除在某个容器之后创建的容器

docker rm $(docker ps -f since=a6ca4661ec7f -q)

Docker将容器存储在Ubuntu中的/var/lib/docker/containers中。我认为额外的容器没有其他危害,但会占用磁盘空间。

首先,在试图删除容器之前停止运行它们

移除正在运行的容器

docker rm $(docker stop -t=1 $(docker ps -q))

你可以用kill代替stop。在我的情况下,我更喜欢停止,因为我倾向于重新运行它们,而不是每次都创建一个新的,所以我试图很好地关闭它们。

注意:试图停止一个容器会给你一个错误:

错误:无法移除正在运行的容器,请先停止它

移除所有容器

docker rm $(docker ps -a -q)

下面是一个脚本,用于删除创建时间超过2天的正在运行和已退出的容器:

#!/bin/bash
# This script will kill and remove containers older than 2 days.
#
docker ps -aq > /scripts/containers.txt
today=`date +%Y-%m-%d`
oldate=`date --date="2 day ago" +%Y-%m-%d`
while read p; do
    cont=`docker inspect -f '{{ .Created }}' $p | cut -c 1-10`
    echo " Created date of $p is $cont"
    k=`echo $(( ( $(date -ud $today +'%s') - $(date -ud $cont +'%s'))/60/60/24 ))`
    echo $k
    if [ $k -ge 2 ];
    then
            echo "Killing docker container $p"
            docker kill $p
            echo "Removing docker container $p"
            docker rm $p
    else
            echo "Docker container $p is not one day old, so keeping the container."
    fi
done </scripts/containers.txt