Docker命令删除除特定标签外的所有容器及其图像
例如,如果我有几个容器的x和y标签
docker ps -a -q -f label = name = x
docker ps -a -q -f label = name = y
我想保留它们,并从系统中删除所有剩余的容器及其图像。 什么是docker命令?
我们使用comm (1)来获取列出所有图像的第一个命令和按标签过滤的第二个命令之间的差异,并将所有信息输出到docker rmi / rm。 sed命令用于删除未标记图像的<none>
string,或者使用旧版Docker构build的图像。
对于图像:
comm -3 <(docker images --digests --format '{{.Repository}}:{{.Tag}}@{{.Digest}}' | sort) <(docker images --digests --format '{{.Repository}}:{{.Tag}}@{{.Digest}}' -f label=FOO=BAR | sort) | sed -rne 's/([^>]):<none>@/\1@/p' | xargs -r docker rmi
对于容器:
comm -3 <(docker ps -a --format '{{.ID}}' | sort) <(docker ps -a --format '{{.ID}}' -f label=FOO=BAR | sort) | xargs -r docker rm
注意:考虑是否将-v
添加到上面的docker rm
以删除关联的卷。
有很多方法来完成这个。 这是一个简单的方法:
只要删除容器:
docker ps -a | grep -v 'java' | grep -v 'sql' | awk '{print $1}' | xargs docker rm docker ps -a => list all containers grep -v 'java' => anything that does not start with the name 'java' grep -v 'sql' => anything that does not start with the name 'sql' ...(add more here as required) awk '{print $1}' => get the container id (ie first column from output) xargs docker rm => remove the matched containers
要删除容器和相应的图像(只需停止容器,并执行docker强制移除图像)
docker ps -a | grep -v 'java' | grep -v 'sql' | awk '{print $1}' | xargs docker stop docker ps -a | grep -v 'java' | grep -v 'sql' | awk '{print $2}' | xargs docker rmi -f
- 来自守护进程的错误响应:chtimes / var / lib / docker / tmp / docker-export- $:无效的参数
- Docker – 全functionWordPress(WP + DB + PHPMyAdmin)
- Docker Cloud WordPress堆栈工作stream优化
- 如果入口点没有完成,Dockerfile不运行CMD
- Nginx没有显示index.php
- GO – 本地导入不起作用
- 无法理解docker cp命令
- Docker:在Drupal安装过程中,链接到mysql容器的Drupal容器无法连接到mysql
- 在Windows 10上托pipe的Windows容器将丢失其DNS