删除除一个以外的所有Docker容器

时间:2016-11-22 14:07:12

标签: docker

我有停止容器然后将其删除的脚本

If T_ANAME.Text = "" Or R_MALE.Checked = False Or R_FEMALE.Checked = False Or R_OTHERS.Checked = False _

Or (C_COUNTRY.Text = "-- Select Country --") _ Then

End If

但我不想删除名为" my_docker"的

的docker容器。

如何删除除此之外的所有容器?

11 个答案:

答案 0 :(得分:25)

你可以试试这个,

  • 过滤掉不需要的项目(grep -v),然后
  • 返回第一列,其中包含容器ID

运行此命令:

docker rm $(docker ps -a | grep -v "my_docker" | awk 'NR>1 {print $1}')

要使用cut代替awk,请尝试以下操作:

docker rm $(docker ps -a | grep -v "my_docker" | cut -d ' ' -f1)

此处使用awk / cut的示例:bash: shortest way to get n-th column of output

答案 1 :(得分:9)

问题的标题要求图片不是容器。对于那些想要删除除一个以外的所有图片的问题的绊脚石,您可以使用 docker prune 以及过滤器标记:

docker image prune -a --force --filter "label!=image_name"

将image_name替换为图像名称。

你也可以使用"直到="标记按日期修剪图像。

答案 2 :(得分:5)

这就是docker rm $(List of container Ids)实际发生的事情。所以这只是一个如何过滤容器ID列表的问题。

例如:如果您要删除所有容器,但要删除具有特定容器ID的容器,那么此docker rm $(docker ps -a -q | grep -v "my_container_id")就可以了。

答案 3 :(得分:2)

对于那些想要排除多个容器的人,只需添加

grep -v "container_name2" | 

在grep -v“ container_name1”命令之后。 最终命令可能类似于

docker rm $(docker ps -a | grep -v "my_docker1" | grep -v "my_docker2" | cut -d ' ' -f1)

答案 4 :(得分:1)

我更喜欢使用(未经测试的)

的行来测试容器名称

docker inspect --format '{{ .Name }}' $(docker ps -aq)

这将给出(运行或不运行)容器的名称,您可以过滤和

docker rm

使用此信息

答案 5 :(得分:0)

老问题,但我喜欢复活帖子。

对于这种情况,您可以使用Spotify的Docker GC:https://github.com/spotify/docker-gc#excluding-containers-from-garbage-collection

你可以这样做:

echo "my_docker" >> /tmp/docker-gc-exclude-containers
echo '*' > /tmp/docker-gc-exclude
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc:ro -v /tmp/docker-gc-exclude-containers:/etc/docker-gc-exclude-containers:ro -v /tmp/docker-gc-exclude:/etc/docker-gc-exclude:ro spotify/docker-gc

(如果您也想清除图像,可以避免挂载docker-gc-exclude文件)

答案 6 :(得分:0)

停止

docker stop $(docker ps -a -q | grep -v "my_container_id")

要删除

docker rm $(docker ps -a -q | grep -v "my_container_id")

答案 7 :(得分:0)

我是通过以下命令实现的:

docker image rm -f $(docker images -a | grep -v "image_repository_name" | awk 'NR>1 {print $1}')

答案 8 :(得分:0)

删除除node图像以外的所有图像

sudo docker rmi -f $(sudo docker image ls -a | grep -v "node" | awk 'NR>1 {print $3}')

答案 9 :(得分:0)

我知道它的后期响应很少,但是它可以帮助任何Windows用户。这是我准备的命令:

docker rmi $(
docker image list -a --no-trunc --format "table {{.ID}},{{.Repository}}" | 
Where-Object { 
    $_ -NOTMATCH  "mcr.microsoft.com/dotnet/core/aspnet" -and
    $_ -NOTMATCH  "ubuntu" -and
    $_ -NOTMATCH  "busybox" -and
    $_ -NOTMATCH  "alpine"
} | Select-Object -Skip 1 | %{ $_.Split(',')[0];} 

)

答案 10 :(得分:-2)

也许您可以启动所有不想修剪的容器。然后,运行:

docker container prune -a