我试图强行停止并删除所有 Docker 镜像:
docker stop $(docker ps -a -q) && docker rm -f $(docker ps -a -q) && docker rmi -f $(docker images -a -q)
但是,我收到:
Error response from daemon: conflict: unable to delete 3b5b05d98767 (cannot be forced) - image is being used by running container deedefb82e27
.
据我了解,容器重新启动的速度比命令尝试删除它的速度要快。
错误在于删除图像,而不是容器。这要么是来自尚未完全删除的容器的竞争条件,要么是系统上的其他启动容器,例如群模式。
对于竞争条件,只需在命令之间添加几秒钟即可让 rm 有时间在服务器上完成。由于您正在执行以下操作,因此无需停止rm -f
:
docker rm -f $(docker ps -a -q) \
&& sleep 2 && docker rmi -f $(docker images -a -q)
如果您的容器在 swarm 模式下运行,请首先删除您不想运行的堆栈和服务:
# something like this, will only work if you have stacks defined
docker stack rm $(docker stack ls --format '{{.Name}}')
# similar command for services
docker service rm $(docker service ls -q)
每个容器都可能需要 10 秒才能退出,另外还有几秒钟让群管理器发送命令,因此您可能需要sleep 15
在它们都返回后给服务器时间来完成请求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句