166 docker 如何删除image

本文详细介绍了在Docker中删除未使用的images的方法,包括使用`dockerrmi`命令删除tag,以及如何通过删除相关container来彻底删除image。同时提供了一行命令实现大扫除操作,确保系统保持高效运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker中删除images的命令是docker rmi,但有时候执行此命令并不能删除images

[yaxin@ubox ~]$docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
eg_sshd             latest              ed9c93747fe1        45 hours ago        329.8 MB
CentOS65            latest              e55a74a32125        2 days ago          360.6 MB
[yaxin@ubox ~]$docker rmi ed9c93747fe1
Untagged: ed9c93747fe16627be822ad3f7feeb8b4468200e5357877d3046aa83cc44c6af
[yaxin@ubox ~]$docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              ed9c93747fe1        45 hours ago        329.8 MB
CentOS65            latest              e55a74a32125        2 days ago          360.6 MB

可以看出,image并没有被删除,只是他的tag被删除了,再次执行docker rmi IMAGE_ID只会报错

[yaxin@ubox ~]$docker rmi ed9c93747fe1
Error: image_delete: Conflict, ed9c93747fe1 wasn't deleted
2014/03/22 15:58:27 Error: failed to remove one or more images

查看docker的帮助会发现有两个与删除有关的命令rmrmi

rm Remove one or more containers
rmi Remove one or more images

这里有两个不同的单词,imagescontainer。其中images很好理解,跟平常使用的虚拟机的镜像一个意思,相当于一个模版,而container则是images运行时的的状态。docker对于运行过的image都保留一个状态(container),可以使用命令docker ps来查看正在运行的container,对于已经退出的container,则可以使用docker ps -a来查看。 如果你退出了一个container而忘记保存其中的数据,你可以使用docker ps -a来找到对应的运行过的container使用docker commit命令将其保存为image然后运行。

回到之前的问题,由于image被某个container引用(拿来运行),如果不将这个引用的container销毁(删除),那image肯定是不能被删除。

所以想要删除运行过的images必须首先删除它的container。继续来看刚才的例子,

[yaxin@ubox ~]$docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                   NAMES
117843ade696        ed9c93747fe1        /bin/sh -c /usr/sbin   46 hours ago        Up 46 hours         0.0.0.0:49153->22/tcp   test_sshd

可以看出ed9c93747fe1的image被117843ade696的container使用着,所以必须首先删除该container

[yaxin@ubox ~]$docker rm 117843ade696
Error: container_delete: Impossible to remove a running container, please stop it first
2014/03/22 16:36:44 Error: failed to remove one or more containers

出现错误,这是因为该container正在运行中(运行docker ps查看),先将其关闭

[yaxin@ubox ~]$docker stop 117843ade696
117843ade696
[yaxin@ubox ~]$docker rm 117843ade696
117843ade696
[yaxin@ubox ~]$docker rmi ed9c93747fe1
Deleted: ed9c93747fe16627be822ad3f7feeb8b4468200e5357877d3046aa83cc44c6af
Deleted: c8a0c19429daf73074040a14e527ad5734e70363c644f18c6815388b63eedc9b
Deleted: 95dba4c468f0e53e5f1e5d76b8581d6740aab9f59141f783f8e263ccd7cf2a8e
Deleted: c25dc743e40af6858c34375d450851bd606a70ace5d04e231a7fcc6d2ea23cc1
Deleted: 20562f5714a5ce764845119399ef75e652e23135cd5c54265ff8218b61ccbd33
Deleted: c8af1dc23af7a7aea0c25ba9b28bdee68caa8866f056e4f2aa2a5fa1bcb12693
Deleted: 38fdb2c5432e08ec6121f8dbb17e1fde17d5db4c1f149a9b702785dbf7b0f3be
Deleted: 79ca14274c80ac1df1333b89b2a41c0e0e3b91cd1b267b31bef852ceab3b2044
[yaxin@ubox ~]$docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
CentOS65            latest              e55a74a32125        2 days ago          360.6 MB

可以看出,image已经被删除。


移除所有的容器和镜像(大扫除)

用一行命令大扫除:

docker kill $(docker ps -q) ; 
docker rm $(docker ps -a -q) ;
dockerrmi $(docker images -q -a) 

注:shell 中的 $() 和 `` 类似,会先执行这里面的内容,上面的脚本会出现如下 docker kill "pids" ; docker kill 在 docker 中用于停止容器,docker rm 删除容器, docker rmi 删除镜像

当没有运行的容器或者是根本没有容器的时候,这只会提示一个警告信息。当你想尝试的时候,这就是个非常好的单行命令。如果你仅仅想删除所有的容器,你可以运行如下命令:

docker kill $(docker ps -q) ;
docker rm $(docker ps -a -q) 


<think>嗯,用户询问如何在Docker删除image和container,这是一个常见的Docker操作问题。用户可能刚接触Docker,或者遇到了无法删除资源的情况。首先需要区分container和image删除逻辑。container是运行实例,image是静态模板,两者有依赖关系:存在基于某image运行的container时,该image不能被删除。从引用内容看,用户提供的资料里包含多种删除场景:1.常规删除单个container使用$dockerrm[容器ID]$2.删除image时若提示"dependentchildimages",说明存在子镜像(引用1)3.批量删除container可通过$dockerrm$(dockercontainerls-qa)$实现(引用2)4.删除untaggedimage可用$dockerrmi$(dockerimages|grep"<none>"|awk'{print$3}')$(引用3)用户可能遇到的两个典型难点:-删除image时提示"imageisinuse",需要先停止并删除关联container-权限问题如"Gotpermissiondenied"(引用1),这需要sudo或配置用户组准备在回复中强调操作顺序:先删container再删image,对于批量操作和异常处理给出具体方案。特别要说明依赖关系的解决方法,因为这是最常见的卡点。考虑在相关问题里加入Docker存储原理,因为理解分层机制才能从根本上解释删除冲突的原因。</think>### 如何删除 Docker 中的 Image 和 Container #### 一、删除 Container(容器) 1. **删除单个容器** 先停止运行中的容器(若存在): ```bash docker stop <容器ID或名称> ``` 删除容器: ```bash docker rm <容器ID或名称> ``` *例:`docker rm mysql` 删除名为 mysql 的容器[^4]* 2. **批量删除所有容器** ```bash docker rm -f $(docker container ls -aq) # -f 强制删除运行中的容器 ``` *说明:`docker container ls -aq` 列出所有容器ID(含停止状态)[^2][^5]* #### 二、删除 Image(镜像) 1. **删除单个镜像** ```bash docker rmi <镜像ID或名称> ``` *例:`docker rmi ubuntu:20.04`* 2. **解决依赖冲突** 若提示 `image has dependent child images`[^1]: - 先删除依赖该镜像的子镜像 - 或查找关联容器并删除: ```bash docker ps -a --filter ancestor=<镜像ID> # 检查关联容器 docker rm -f $(docker ps -aq --filter ancestor=<镜像ID>) # 删除关联容器 docker rmi <镜像ID> # 再次尝试删除 ``` 3. **批量删除虚悬镜像**(未命名的 `<none>` 镜像) ```bash docker rmi $(docker images -f "dangling=true" -q) ``` *等同于 `docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi`[^3]* #### 三、关键注意事项 1. **删除顺序** 必须**先删除依赖镜像的容器**,才能删除镜像[^1][^4]。 *错误顺序:直接 `docker rmi` → 触发 `conflict` 错误* 2. **权限问题** 若报错 `Got permission denied`[^1],在命令前加 `sudo` 或[配置用户组](https://docs.docker.com/engine/install/linux-postinstall/): ```bash sudo usermod -aG docker $USER # 将当前用户加入 docker 组 newgrp docker # 刷新组权限 ``` 3. **强制删除** 添加 `-f` 参数(慎用): ```bash docker rmi -f <镜像ID> # 可能仍失败于子镜像依赖 ``` > **操作验证**: > - 查看剩余容器:`docker ps -a` > - 查看剩余镜像:`docker images` > 删除后列表应不再显示目标资源[^2][^5]。 --- ### 相关问题 1. 如何清理 Docker 占用的磁盘空间(包括 volumes 和缓存)? 2. Docker 镜像的分层机制如何影响删除操作? 3. 如何安全删除被多个容器共享的镜像? 4. Docker 的 `prune` 命令与直接删除有何区别? [^1]: 删除镜像时若存在子镜像依赖会触发 `conflict` 错误,需先清理关联容器 [^2]: 批量删除容器需结合 `docker container ls -aq` 获取 ID 列表 [^3]: 过滤 `<none>` 镜像的关键字是虚悬镜像的标识 [^4]: 删除容器可通过名称、完整 ID 或 ID 前缀操作 [^5]: 删除后使用 `docker ps -a` 验证结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值