docker 删除镜像

0 阅读2分钟
  1. 查看现有镜像
# 列出所有镜像
docker images

# 输出示例:
REPOSITORY                  TAG       IMAGE ID       CREATED       SIZE
chaitin/safeline-mgt-api    latest    68f38ece5d03   2 years ago   595MB
chaitin/safeline-mario      latest    f15fa779a859   2 years ago   198MB
chaitin/safeline-detector   latest    fad15e0fecbe   2 years ago   234MB
postgres                    15.2      bf700010ce28   3 years ago   379MB
redis                       7.0.10    33e3db53b328   3 years ago   117MB
  1. 删除镜像
# 根据IMAGE ID删除
docker rmi 68f38ece5d03
# 或根据REPOSITORY:TAG删除
docker rmi chaitin/safeline-mgt-api:latest

3.常见错误及解决方案

错误1:镜像被容器使用

Error response from daemon: conflict: unable to delete 68f38ece5d03 (cannot be forced) - image is being used by running container a0ae66de022d

解决方案:

# 方案1:先删除使用该镜像的容器
docker rm 容器ID

# 方案2:强制删除镜像
docker rmi -f 镜像ID

# 方案3:查看哪些容器在使用该镜像
docker ps -a --filter ancestor=镜像名

错误2:权限不足

# 使用sudo执行(如果在Linux系统中)
sudo docker rmi 镜像ID

实用技巧

清理所有无用镜像

# 删除所有未使用的镜像(推荐)
docker image prune

# 强制删除所有未使用的镜像(不询问)
docker image prune -a -f

结合条件删除

# 删除特定模式的镜像
docker images | grep "pattern" | awk '{print $3}' | xargs docker rmi

# 删除创建时间超过24小时的镜像
docker images --format "{{.ID}} {{.CreatedAt}}" | grep "24 hours" | awk '{print $1}' | xargs docker rmi

常用选项说明

选项说明
-f, --force强制删除镜像(即使有容器依赖)
--no-prune不删除未打标签的父镜像

注意事项

  1. 数据备份:删除前确认镜像不再需要,或已推送到镜像仓库
  2. 依赖关系:确保没有容器(包括停止的容器)依赖该镜像
  3. 标签问题:同一个镜像ID可能有多个标签,删除标签不等于删除镜像层
  4. 磁盘空间:删除后可以使用 docker system df 查看释放的磁盘空间

如果需要更详细的帮助,可以查看官方文档:

docker rmi --help