在长时间运行Docker时,系统中存在大量的镜像。如何一次安全地删除所有未使用的Docker映像以释放存储空间?
另外,我还想删除几个月前拉的图片,这些图片有正确的TAG。
因此,我并不是只要求删除未标记的图像。我正在寻找一种方法来删除一般不使用的图像,其中包括未标记和其他图像,如几个月前拉正确的TAG。
在长时间运行Docker时,系统中存在大量的镜像。如何一次安全地删除所有未使用的Docker映像以释放存储空间?
另外,我还想删除几个月前拉的图片,这些图片有正确的TAG。
因此,我并不是只要求删除未标记的图像。我正在寻找一种方法来删除一般不使用的图像,其中包括未标记和其他图像,如几个月前拉正确的TAG。
当前回答
如果您希望自动/定期清理退出的容器,并删除运行中的容器不使用的映像和卷,您可以下载映像meltwater/docker-cleanup。
运行:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest
默认每30分钟运行一次。但是,您可以使用该标志以秒为单位设置延迟时间(DELAY_TIME=1800选项)。
详情:https://github.com/meltwater/docker-cleanup/blob/master/README.md
其他回答
第二次更新(2017-07-08)
参考(再次)VonC,使用更近期的系统修剪。不耐烦的人可以使用-f,——force选项跳过提示符:
docker system prune -f
没有耐心和鲁莽的人还可以使用-a,——all选项删除“未使用的图像,而不仅仅是悬垂的图像”:
docker system prune -af
https://docs.docker.com/engine/reference/commandline/system_prune/
更新
参考VonC的答案,它使用了最近添加的修剪命令。下面是对应的shell别名方便:
alias docker-clean=' \
docker container prune -f ; \
docker image prune -f ; \
docker network prune -f ; \
docker volume prune -f '
旧的答案
删除停止(退出)的容器:
$ docker ps --no-trunc -aqf "status=exited" | xargs docker rm
删除未使用的(悬空的)图像:
$ docker images --no-trunc -aqf "dangling=true" | xargs docker rmi
如果您对不可撤销的数据丢失非常谨慎,那么您可以删除未使用的(悬空)卷(v1.9及以上版本):
$ docker volume ls -qf "dangling=true" | xargs docker volume rm
下面是一个方便的shell别名:
alias docker-clean=' \
docker ps --no-trunc -aqf "status=exited" | xargs docker rm ; \
docker images --no-trunc -aqf "dangling=true" | xargs docker rmi ; \
docker volume ls -qf "dangling=true" | xargs docker volume rm'
参考文献
Docker ps -f 码头工人rm Docker images -f 码头工人rmi Docker v1.9.0版本说明 Docker卷ls Docker卷rm
docker rm `docker ps -aq`
or
docker rm $(docker ps -q -f status=exited)
假设你有Docker 1.13或更高版本,你可以只使用修剪命令。对于你的问题,特别是关于删除旧图像,你想要第一个。
# Remove unused images
docker image prune
# Remove stopped containers.
docker container prune
# Remove unused volumes
docker volume prune
# Remove unused networks
docker network prune
# Command to run all prunes:
docker system prune
我建议不要习惯使用docker系统的prune命令。我认为用户会不小心删除他们不想删除的内容。就我个人而言,我将主要使用docker映像修剪和docker容器修剪命令。
几周前移除旧容器。
Docker rm $(Docker ps -a | grep "weeks" | awk '{打印$1;}”)
几周前删除旧图像。小心些而已。这将删除几周前创建的基本图像,但您的新图像可能会使用这些图像。
Docker rmi $(Docker images | grep 'weeks' | awk '{打印$3;}”)
docker rm $(docker ps -faq)
docker rmi $(docker ps -faq)
- f力
——所有
-q模式