我有以下图片:
alex@alexvps:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> 70c0e19168cf 5 days ago 1.069 GB
<none> <none> c2ce80b62174 8 days ago 399.2 MB
<none> <none> 60afe4036d97 8 days ago 325.1 MB
当我试图删除其中一个时,我会得到:
alex@alexvps:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images
我该如何移除它们?为什么会有这样的冲突?
可能的原因:
原因可能是当前正在运行的容器正在使用该映像。在这种情况下,你可以列出正在运行的容器,停止相关的容器,然后删除图像:
docker ps
docker stop <containerid>
docker rm <containerid>
docker rmi <imageid>
如果你不能通过docker ps找到容器,你可以使用它列出所有已经退出的容器并删除它们。
docker ps -a | grep 60afe4036d97
docker rm <containerid>
注意:注意不要一次性删除所有已退出的容器,以免使用仅限卷容器。它们保持在Exit状态,但包含有用的数据。
如果你想自动/定期清理退出的容器,并删除运行中的容器不使用的镜像和卷,你可以下载Docker镜像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
你可以简单地在命令末尾加上——force。如:
sudo docker rmi <docker_image_id> --force
为了让它更智能,你可以添加as:
首先停止所有正在运行的容器。
Sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')
现在移除容器
Sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')
现在作为最后一步,删除docker映像
Sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}')——force
这里的docker ps $1是第一列,即docker容器ID。
docker images $3是第三列,即docker image ID。
注意:在上述命令中使用sudo,以防您可能/可能没有执行命令的权限。如果它给你错误,尝试删除sudo。