Py学习  »  docker

本地Docker注册表卷被本地映像100%使用,如何从中释放空间?

Abhishek Yadav • 4 年前 • 1619 次点击  

此外,我还想删除几个月前提取的图像,其中有正确的 TAG .

所以,我不要求只删除未标记的图像。我正在寻找一种方法来删除一般未使用的图像,包括未标记的图像和其他图像,例如几个月前用正确的 .

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53526
 
1619 次点击  
文章 [ 24 ]  |  最新文章 4 年前
Zhao Li
Reply   •   1 楼
Zhao Li    5 年前

其他的答案很好,特别是:

docker system prune # doesn't clean out old images
docker system prune --all # cleans out too much

但我需要在这两个命令中间做点什么 filter

docker image prune --all --filter "until=4320h" # delete images older than 6 months ago; 4320h = 24 hour/day * 30 days/month * 6 months

希望有帮助:)

供参考: https://docs.docker.com/config/pruning/#prune-images

Wernight
Reply   •   2 楼
Wernight    8 年前

删除 旧标签 一个多月前的图片:

$ docker images --no-trunc --format '{{.ID}} {{.CreatedSince}}' \
    | grep ' months' | awk '{ print $1 }' \
    | xargs --no-run-if-empty docker rmi

失败 -f 旗帜。

示例 /etc/cron.daily/docker-gc

#!/bin/sh -e

# Delete all stopped containers (including data-only containers).
docker ps -a -q --no-trunc --filter "status=exited" | xargs --no-run-if-empty docker rm -v

# Delete all tagged images more than a month old
# (will fail to remove images still used).
docker images --no-trunc --format '{{.ID}} {{.CreatedSince}}' | grep ' months' | awk '{ print $1 }' | xargs --no-run-if-empty docker rmi || true

# Delete all 'untagged/dangling' (<none>) images
# Those are used for Docker caching mechanism.
docker images -q --no-trunc --filter dangling=true | xargs --no-run-if-empty docker rmi

# Delete all dangling volumes.
docker volume ls -qf dangling=true | xargs --no-run-if-empty docker volume rm
rubicks
Reply   •   3 楼
rubicks    6 年前

再次参考VonC,使用更新的 system prune . 不耐烦的人可以跳过提示 -f, --force 选项:

docker system prune -f

不耐烦和 还可以使用 -a, --all 选项:

docker system prune -af

https://docs.docker.com/engine/reference/commandline/system_prune/

更新:

VonC's answer 使用最近添加的 prune 命令。下面是相应的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'

VonC
Reply   •   4 楼
VonC    5 年前

2016年9月更新:Docker 1.13: PR 26108 commit 86de7c0

docker system prune 将删除所有悬挂数据(即按顺序:容器已停止、没有容器的卷和没有容器的图像)。即使是未使用的数据 -a

你还有:

为了 未使用 图像,使用 docker image prune -a (用于移除悬挂物 未使用的图像)。
未使用 意思是“没有被任何容器引用的图像”:在使用之前要小心 .

A L answer , docker system prune --all 将全部删除 图片不仅仅是悬挂的。。。可能有点太多了。

结合 docker xxx prune --filter option 是限制修剪的好方法( docker SDK API 1.28 minimum, so docker 17.04+ )

  • until (<timestamp>) -仅删除在给定时间戳之前创建的容器、图像和网络
  • label label=<key> , label=<key>=<value> , label!=<key> label!=<key>=<value> )-仅删除容器、图像、网络和卷 没有 ,以防万一 label!=...

见“ Prune images “举个例子。


原答案(2016年9月)

docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

我有一个 alias for removing those [dangling images] 13 drmi

这个 dangling=true 过滤器查找未使用的图像

这样,任何不再被标记图像引用的中间图像都将被删除。

第一 对于 exited processes (containers)

alias drmae='docker rm $(docker ps -qa --no-trunc --filter "status=exited")'

haridsv 指出 in the comments

从技术上讲, 您应该先清理容器,然后再清理图像,因为这将捕获更多的悬挂图像和更少的错误


Jess Frazelle (jfrazelle) 拥有 bashrc function :

dcleanup(){
    docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null
    docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null
}

docker-gc :


一个简单的Docker容器和图像垃圾收集脚本。

  • 删除之后不属于任何剩余容器的图像。