Docker错误无法删除Docker容器,冲突:无法删除存储库引用


165

我想在Docker上删除容器,但是要删除时发生错误

我下一步删除容器之前,请参阅现有容器列表

sts@Yudi:~/docker$ sudo docker ps -as

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
78479ffeba5c        ubuntu              "/bin/bash"         42 hours ago        Exited (0) 42 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)
0bd2b54678c7        training/webapp     "python app.py"     5 days ago          Exited (0) 5 days ago                         backstabbing_ritchie   0 B (virtual 323.7 MB)
0adbc74a3803        training/webapp     "python app.py"     5 days ago          Exited (143) 5 days ago                       drunk_feynman          0 B (virtual 323.7 MB)

我要删除该列表,即“ training / webapp”, 但发生了一个错误

sts@Yudi:~/docker$ sudo docker rmi training/webapp
Error response from daemon: conflict: unable to remove repository reference "training/webapp" (must force) - container 0bd2b54678c7 is using its referenced image 54bb4e8718e8
Error: failed to remove images: [training/webapp]

容器是否在图像中运行?

请帮忙


有时我会遇到这种情况,但是我无法弄清楚导致这种情况发生的方式(因为它并不总是发生在我身上),另外,如果我强行删除图像,它也会删除很多其他内容。您知道是什么导致了错误吗?你能复制吗?
查理·帕克

最近极好的总结如何删除泊坞图片,容器和卷从梅丽莎·安德森2017年12月,与过滤器的例子,图案等
Webel IT澳大利亚- upvoter

Answers:


124

docker映像和docker容器之间有区别。检查此SO问题

简而言之,容器是图像的运行实例。这就是为什么如果该映像中有正在运行的容器,则无法删除该映像的原因。您只需要先删除容器即可。

docker ps -a               # Lists containers (and tells you which images they are spun from)
docker images              # Lists images  
docker rm <container_id>   # Removes a container

docker rmi <image_id>      # Removes an image 
                           # Will fail if there is a running instance of that image i.e. container

docker rmi -f <image_id>   # Forces removal of image even if it is referenced in multiple repositories, 
                           # i.e. same image id given multiple names/tags 
                           # Will still fail if there is a docker container referencing image

Docker 1.13+更新[自2017年1月起]

在Docker 1.13中,我们将每个命令重新组合在一起,使其位于与其交互的逻辑对象下

基本上,上述命令也可以更清楚地重写为:

docker container ls -a
docker image ls
docker container rm <container_id>
docker image rm <image_id>

另外,如果你想删除一切你可以使用:

docker system prune -a

警告!这将删除:

  • 所有停止的容器
  • 至少一个容器未使用的所有网络
  • 所有未使用的图像
  • 全部建立缓存

2
我最终不得不使用docker rmi -f id“强制”清除。
WernerCD '17

@WernerCD -f可以在您要删除多个存储库中引用的映像时提供帮助,这是无法删除映像的另一个常见原因。
艾哈迈德·阿卜杜勒加尼

1
值得注意的是,docker container ls仅列出了正在运行的容器。这让我感到-a困惑,直到我意识到添加标志列出了所有这些标志。
MFB

@MFB好点。在命令中添加了标志,以保持两组命令之间的奇偶校验。谢谢!
艾哈迈德·阿卜杜勒加尼

仍可在OSX Docker Desktop v2.2.0.4(引擎19.03.8)上运行
rrrrrraul

83

首先,删除容器名称

$ sudo docker rm backstabbing_ritchie

结果

$ sudo docker rm backstabbing_ritchie
  backstabbing_ritchie

删除第二部分,该部分在要删除的容器上列出

$ sudo docker rm drunk_feynman 
  drunk_feynman

二,取出容器

$ sudo docker rmi training/webapp

结果

$ sudo docker rmi training/webapp  
  Untagged: training/webapp:latest
  Deleted: 54bb4e8718e8600d78a5d7c62208c2f13c8caf0e4fe73d2bc0e474e93659c0b5
  Deleted: f74dd040041eb4c032d3025fe38ea85de8075992bdce6789b694a44b20feb8de
  Deleted: 7cbae69141977b99c44dc6957b032ad50c1379124d62b7d7d05ab7329b42348e
  Deleted: abb991a4ed5e4cde2d9964aec4cccbe0015ba9cc9838b696e7a32e1ddf4a49bd
  Deleted: 1952e3bf3d7e8e6a9b1e23bd4142e3c42ff7f4b7925122189704323593fd54ac
  Deleted: f95ebd363bf27a7546deced7a41a4099334e37a3d2901fa3817e62bb1ade183f
  Deleted: 20dd0c75901396d41a7b64d551ff04952084cc3947e66c67bae35759c80da338
  Deleted: 2505b734adda3720799dde5004302f5edb3f2a2ff71438f6488b530b728ba666
  Deleted: 2ee0b8f351f753f78f1178000ae37616eb5bf241d4ef041b612d58e1fd2aefdc
  Deleted: 2ce633e3e9c9bd9e8fe7ade5984d7656ec3fc3994f05a97d5490190ef95bce8d
  Deleted: 98b15185dba7f85308eb0e21196956bba653cf142b36dc08059b3468a01bf35d
  Deleted: 515565c29c940355ec886c992231c6019a6cffa17ff1d2abdfc844867c9080c5
  Deleted: 2880a3395eded9b748c94d27767e1e202f8d7cb06f1e40e18d1b1c77687aef77

检查配件

  $ sudo docker ps -as
  CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
  78479ffeba5c        ubuntu              "/bin/bash"         43 hours ago        Exited (0) 43 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)

6
如果您碰巧有很多旧容器,则还可以考虑使用docker rm `docker ps -aq`进行清理,而不是一次删除它们。更多信息在这里
Philiiiiiipp '16

为什么在删除图像之前必须删除名称?为什么要尝试不先删除名称就删除图像完全是个问题?
code_dredd

@code_dredd没有“删除名称”之类的东西。必须先删除容器,然后再删除图像。有关更多详细信息,请访问stackoverflow.com/a/40283776/1998422
艾哈迈德·阿卜杜勒甘尼

37

如果您要清理Docker映像和容器

注意:这将冲洗所有东西

停止所有容器

docker stop $(docker ps -a -q)

删除所有容器

docker rm $(docker ps -a -q)

删除所有图片

docker rmi -f $(docker images -a -q)

那行得通。同样,如果停止容器,您仍将在列表中看到它。因此,您必须使用删除它docker rm $(docker ps -a -q)。谢谢!

28

您可以使用-foption强制删除容器。

sudo docker rmi -f training/webapp

您可以sudo docker stop training/webapp在删除之前停止使用容器


1
我已经尝试过,通过停止容器$ sudo docker stop training / webapp守护程序的错误响应:没有这样的ID:training / webapp错误:无法停止容器:[training / webapp]
Yuday

您可以尝试停止使用容器ID sudo docker stop 0bd2b54678c7
Saril Sudhakaran 2015年

23

如果您启动了多个Docker容器,请使用此

$ docker rm $(docker ps -aq)

它将删除“ ps -aq”命令中列出的所有当前泊坞窗。

来源:https ://github.com/docker/docker/issues/12487上的aaam


这对我有用。运行此命令后,我将要运行docker image ls,然后docker image rm Xls输出中获取每个X。
jftuga '19

5

注意,这是一个已有2年历史的问题,但仍然想与我分享这个特定问题的解决方法:

首先,运行docker container ls -a以列出您拥有的所有容器,并指出要删除的容器。

其次,用命令删除一个docker container rm <CONTAINER ID>(如果容器当前正在运行,则应先将其停止,运行docker container stop <CONTAINER ID>以优雅地停止指定的容器,如果由于某种原因它没有停止,则可以运行docker container kill <CONTAINER ID> to force shutdown of the specified container)。

第三,通过运行删除容器docker container rm <CONTAINER ID>

最后,您可以运行docker image ls -a以查看所有图像并通过运行删除想要的图像docker image rm <hash>


2

删除Docker图像>

列出所有容器

docker container ls

列出所有图片

docker image ls

通过容器ID停止容器

docker container stop <container_id>

通过容器ID删除容器

docker container rm <container_id>

如果不想停止并移除,可以强制移除

docker container rm -f <container_id>

移除图片

docker image rm <image_id>

做完了!


1

列出您所有的docker镜像:

docker images

列出所有存在的Docker容器:

docker ps -a

删除所有目标容器,这些容器正在使用您要删除的图像:

docker rm <container-id>

删除目标图像:

docker rmi <image-name:image-tag or image-id>

0

仅删除与特定图像关联的容器

docker ps -a | grep training/webapp | cut -d ' ' -f 1 | xargs docker rm
  • ps -a:列出所有容器
  • grep training / webapp:滤除除容器以外的所有内容,这些容器是从training / webapp映像开始的
  • cut -d''-f 1:仅列出容器ID(以空格分隔时为第一个字段)
  • xargs docker rm:将容器ID列表输出发送到docker rm命令以删除容器
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.