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

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

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


当前回答

删除所有docker进程: Docker rm $(Docker ps -a -q) 移除特定容器: $ docker ps -a列出所有旧容器 $ docker rm container-Id

其他回答

下面是一个脚本,用于删除创建时间超过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

删除从某个映像创建的所有容器:

docker rm  $(docker ps -a | awk '/myimage:mytag/{print $1}')

移除所有停止使用的容器:

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

来自pauk960的评论:

从1.3.0版本开始,你可以使用docker ps过滤器,而不是grep Exited使用docker ps -a -f status= Exited。如果你使用-q,你只能得到容器id,而不是完整的输出,不需要使用awk。

你可以停止docker容器,一旦停止,你可以删除容器。

停止容器:

$ docker stop "containerID" -你也可以提到容器ID的前两个字母,它是有效的。

取出容器

$ docker rm "containerID" -同样你也可以提到容器的前两个字母

如果这些命令不让你停止/删除容器,m,确保你有sudo访问docker主机。

官方的说法是:

docker rm `docker ps -aq`

Docker的维护者已经表示不会有这样的命令——你可以像这样组合命令:

我们之前讨论过这个问题,希望用户使用上面的代码行,而不必向Docker添加额外的代码。