无法停止和移除Docker容器

4

我试图在我的电脑上停止和删除一些Docker容器,但这里发生了一些非常奇怪的事情。

尝试停止:

docker stop $(docker ps -a -q)

这种方法一开始是有效的,因为 docker ps 没有显示任何正在运行的容器。但是几秒钟后,这些镜像会再次出现,并带有新的容器 ID。

我尝试停止(上一个命令)然后删除:

docker rm $(docker ps -a -q)

但是我收到了一个错误:

错误:没有这个容器:0f57644645eb

我在重新执行停止命令后,也尝试在正在运行的容器上运行此命令:

docker update --restart=no container-id

命令执行成功,但容器仍在重新启动。
我尝试在停止后删除所有镜像:
docker stop $(docker ps -a -q)
docker rmi $(docker images -q)

但是我收到了另一个错误:
Error response from daemon: conflict: unable to delete 0f57644645eb (cannot be forced) - image is being used by running container dcef9cdb703c

我在这里缺少什么?我想停止并删除这些容器,以便在重新安装后使Docker保持原样。

我正在使用Windows 10和Docker版本17.12.0-ce-win47(15139)。


1
你可能正在以服务的方式运行这些容器吗?你可以使用 docker service ls 进行测试。 - Henry
@Henry,谢谢你找到了问题所在。我使用了docker service rm container-id命令,容器终于停止了。我不知道这个“service”的概念,因为我很久以前就启动了这些Docker容器,而且我也不记得我当时做了什么。请随意添加一个答案,我会将其标记为已解决。 - Dherik
1
如果容器是通过 docker-compose.yml 启动的,那么可以观察到相同的行为。如果您有这个文件,请使用 docker-compose stop。如果不是 compose 文件,则是 docker 服务。 - Peter Badida
3个回答

5
行为表明容器是作为服务启动的。该服务将尝试重新启动以满足运行实例的规范要求。 服务可以使用“docker service ls”命令进行检查。 必须删除或重新配置服务以永久停止容器。

谢谢,这解决了我的问题。我只需要 docker service rm containerID 就好了,终于搞定了:D - ncesar

4

你能尝试在删除命令中使用force标志吗?

docker rm -f $(docker ps -aq)
docker rmi -f $(docker images -q)

你好!第一条命令可以正常运行,但第二条命令出现了一些错误,如下所示:Error response from daemon: conflict: unable to delete cb3198f4b4d3 (cannot be forced) - image is being used by running container c805743b91f3 - Dherik
我认为应该使用第一个命令将其删除。如果您直接尝试删除它,会发生什么情况,docker rm -f c80574 - C. Doe
感谢您的贡献。Henry找到了问题所在:我正在以服务方式运行。 - Dherik

3
这对我很有帮助:

这对我很有帮助:

docker rm CONTAINER_ID

你好,我有同样的问题。我无法让所有容器停止。因此,我无法删除特定的Docker镜像,因为它的容器无法停止。我尝试过:FOR /f "tokens=*" %i IN ('docker ps -aq') DO docker stop %iproblem。(这是在Windows 10上,所以常规的dollar解决方案行不通)。FOR开始循环删除容器。但是然后它们又回来了。是否有任何Docker命令可以永久停止它们?我没有运行服务。如果我运行docker service ls,我会得到"This node is not a swarm manager."(并解释如何初始化或加入)。 - RichMeister
您可以删除一个容器,但如果它是一个服务,Docker 将会重新启动它——这才是问题背后真正发生的事情。 - Russ Bateman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接