2016-11-22 56 views

回答

7

你可以试试这个,这将

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

运行此命令:

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

要使用cut而不是awk,试试这个:bash: shortest way to get n-th column of output

2

这是实际发生docker rm $(List of container Ids)

awk/ cut使用这里
docker rm $(docker ps -a | grep -v "my_docker" | cut -d ' ' -f1) 

例子。所以这只是您如何过滤容器ID列表的问题。

例如:如果您想要删除所有容器,但只有一个具有特定容器ID,那么此docker rm $(docker ps -a -q | grep -v "my_container_id")将执行此操作。

+1

这不起作用,因为'docker ps -a -q'不打印容器名称,这意味着您不能使用'grep -v'将其过滤掉。 – nwinkler

1

我宁愿使用沿(未经测试)线的东西

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

这会给(运行或不)容器的名字来测试容器名称,可以过滤和

docker rm

使用该信息

1

的questio的标题n要求图片,不是集装箱。对于那些跨越了这个问题寻找绊脚石删除除一个所有图像,你可以使用码头工人修剪带过滤器的标志位:

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

与图像的名称替换IMAGE_NAME。

您还可以使用“until =”标志按日期修剪图像。

0

老问题,但我喜欢振兴帖子。

对于这样的情况下,你可以使用Spotify的码头工人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文件)

相关问题