在 Docker 中,dangling(悬虚/悬空)资源是指那些已不再被任何容器或镜像引用,但仍占用磁盘空间的中间层资源。以下是关于 dangling 资源的深度解析和高效管理方法:
dangling images)<none>:<none> 标签docker build 时未指定镜像名称/标签docker pull 更新镜像后旧版本变为 <none>dangling volumes)docker volume ls 显示未关联任何容器的卷-v 参数dangling networks)docker-compose down 时未加 --remove-orphans# 查看悬虚镜像
docker images -f "dangling=true"
# 查看悬虚卷
docker volume ls -f "dangling=true"
# 查看悬虚网络
docker network ls --filter "dangling=true"# 删除所有悬虚镜像
docker image prune
# 删除所有未被使用的资源(镜像/卷/网络/容器)
docker system prune
# 强制清理(不确认提示)
docker system prune -f# 1. 先列出所有悬虚资源确认
docker images --filter "dangling=true"
docker volume ls -f "dangling=true"
# 2. 选择性删除(示例:删除7天前的悬虚镜像)
docker image prune --filter "until=168h"
# 3. 保留最近2个版本的镜像(需安装 jq)
docker images --format '{{.Repository}} {{.ID}} {{.CreatedAt}}' |
sort -k1,1 -k3r |
awk '!seen[$1]++ {count[$1]=0} {if (count[$1]++ >= 2) print $2}' |
xargs docker rmi# 找到镜像ID后打标签保留
docker tag <dangling-image-id> myapp:rescue# 1. 查找卷物理路径
docker volume inspect <volume-name> | grep "Mountpoint"
# 2. 直接访问宿主机上的数据
ls /var/lib/docker/volumes/<volume-id>/_data#!/bin/bash
# 安全清理脚本:保留最近3个版本的镜像
KEEP=3
docker images --format '{{.Repository}} {{.ID}} {{.CreatedAt}}' |
sort -k1,1 -k3r |
awk -v keep=$KEEP '!seen[$1]++ {count[$1]=0} {if (count[$1]++ >= keep) print $2}' |
xargs --no-run-if-empty docker rmi -f资源类型 | 磁盘占用 | 安全风险 | 清理优先级 |
|---|---|---|---|
镜像 | 高 | 低 | ★★★★☆ |
卷 | 极高 | 中(可能含敏感数据) | ★★★★★ |
网络 | 低 | 低 | ★★☆☆☆ |
Error: image is referenced in multiple repositories# 先解除所有标签引用
docker rmi repo1:tag repo2:tag
# 再删除镜像
docker rmi <image-id># 查找占用进程
lsof /var/lib/docker/volumes/<volume-id>/_data
# 强制删除
docker volume rm -f <volume-name># 清理Swarm节点的悬虚资源
docker node ps $(docker node ls -q) --filter "desired-state=shutdown" -q | xargs docker rm -f通过合理管理 dangling 资源,您可以:
紧急恢复提示:误删关键镜像时,可通过以下步骤尝试恢复:
1. 查找Docker存储目录中的残留层
find /var/lib/docker/overlay2 -name "diff" -type d -mtime -1
2. 根据修改时间找到对应目录后手动重建镜像
docker import /path/to/layer rescued-image:backup
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。