docker run->'名称已被容器使用'


387

docker使用以下命令运行注册表始终会引发错误:

dev:tmp me$ docker run \
     -d --name registry-v1 \
     -e SETTINGS_FLAVOR=local \
     -e STORAGE_PATH=/registry \
     -e SEARCH_BACKEND=sqlalchemy \
     -e LOGLEVEL=DEBUG \
     -p 5000:5000 \
     registry:0.9.1
Error response from daemon: Conflict. The name "registry-v1" is already in use by container f9e5798a82e0. You have to delete (or rename) that container to be able to reuse that name.

如何防止此错误?

Answers:


427

我也为此感到困惑。这里有两个相关命令:

docker run容器中运行命令

docker start 启动一个或多个停止的容器


8
这是我想要重新运行Docker容器所需的答案。谢谢!
isapir '16

105
因此,docker ps -a在这种情况下使用查看所有容器也很重要。
Sławosz

9
是的,docker start -a container-name您可以使用该命令来启动已使用创建的容器的命令docker run。请注意该-a标志是的简写--attach。这样,容器就在前台启动,就像您使用时docker run(默认情况下在前台运行一个容器)一样。
KrzysztofWołowski19年

1
@Suncatcher是的。
0x7d7b

1
@ eMPee584否,因为docker create 创建了一个容器但没有运行它。
0x7d7b

182

这意味着您过去已经使用参数启动了一个容器docker run --name registry-v1 ...

您需要先删除该容器,然后才能使用创建具有相同名称的容器docker rm registry-v1。当该容器仍处于运行状态时,您需要先将其停止,然后才能使用删除它docker stop registry-v1。或者只是为新容器选择其他名称。

要获取现有容器及其名称的列表,只需调用docker ps -a


4
但是为什么要停下来呢?还是如果他们停下来还在那里还好吗?
mskw

2
所以,你可以在以后无需重新创建它们运行它们
斯科特Stensland

2
因此,您基本上是说“以便可以运行一次映像(即生成容器,然后在其中运行命令),然后根据需要启动容器多次”。但是为什么我们只需要运行一次呢?甚至没有持久化对容器进行“某些操作”的可能更改(请记住,除非提交,否则docker容器状态更改将丢失)。
Maksim Gumerov '16

14
如果您知道容器的名称,则可以使用此快捷方式将其删除docker rm $(docker ps -aq --filter name=myContainerName)
Jujhar Singh

2
@JujharSingh为什么不仅如此docker rm myContainerName
罗德里戈

152

我在这里所做的工作正常。

步骤1 :(列出其名称的Docker容器)

docker ps -a

第2步:

docker rm name_of_the_docker_container

4
这对我很有帮助,“ docker ps”直觉上需要-a标志以返回任何内容。
MichaelChan

docker ps仅返回正在运行的容器,并且需要-a甚至列出已停止的容器。
Surendra Pratap

57

只是为了解释其他人在说什么(花了我一些时间才能理解)的意思是,当您看到此错误时,它意味着您已经有一个容器,并且必须运行它。虽然直观docker run上应该运行它,但实际上不是。该命令docker run仅在第一次使用时才启动容器。要运行现有容器,您需要的是docker start $container-name。这对于要求开发人员创建有意义/直观的命令来说意义重大。


32

您有2个解决此问题的方法...

  1. 使用以下命令删除使用该名称的先前容器 docker rm $(docker ps -aq --filter name=myContainerName)

    要么

  2. 将当前容器重命名为其他名称,--name registry-v1即将该部分更改 为类似 --name myAnotherContainerName

之所以出现此错误,是因为该容器名称(即registry-v1)过去曾被另一个容器使用过...即使该容器可能已退出(即(当前未使用))。


30

在构建新映像时,您经常希望每次都运行一个具有相同名称的新容器。我发现最简单的方法是使用--rm选项启动容器:

--rm        Automatically remove the container when it exits

例如

docker run --name my-micro-service --rm <image>

遗憾的是,在文档示例中几乎随机使用了它


图片还是容器?
Pim Heijden

1
容器从构建的映像运行。大致类似于类定义(图像)和类实例(容器)。
马丁

首先,您说容器,然后说图像。还不清楚 此外,如果该映像的容器已经在运行,则使用后它将保持运行状态--rm。它不会重新启动。
Pim Heijden

4
请注意:--rm仅在使用--rmflag 创建容器时有效。这意味着,如果创建的容器没有--rm标志,则必须先手动删除它,然后才能利用rm标志。
lepe

18

原因

具有相同名称的容器仍然存在。

要重新使用相同的容器名称,请通过以下方式删除现有容器:

docker rm <container name>

说明

容器可以以下列状态存在,在此状态下,容器名称不能用于其他容器:

  • created
  • restarting
  • running
  • paused
  • exited
  • dead

您可以running使用来查看处于状态的容器:

docker ps

要显示所有状态的容器并找出是否采用了容器名称,请使用:

docker ps -a

如果希望重新使用该容器,则--rm是不合适的开关。一个简单的“ docker start {容器名称}”就足够了。
肯·英格拉姆

11

这是我在ubuntu 18上解决此问题的方法:

  1. $ sudo docker ps -a
  2. 复制容器ID

对于每个容器,请执行以下操作:

  1. $ sudo docker stop container_ID
  2. $ sudo docker rm container_ID

10

您可以使用command删除它sudo docker rm YOUR_CONTAINER_ID,然后使用sudo docker run ...; 运行一个新的容器。或使用以下命令重新启动现有容器sudo docker start YOUR_CONTAINER_ID


7

我已通过执行以下步骤解决了该问题,希望对您有所帮助。

  1. 键入docker ps -a以列出系统中的所有容器。
  2. 检查已初始化Docker容器的NAMES部分。
  3. 然后输入 docker rm --force name_of_container
  4. 根据需要安装Docker容器。

我在使用NIFI时遇到问题,并且已使用docker删除并重新安装。祝好运。


4

我只是在学习docker,这也让我受益。我已经停止了具有该名称的容器,因此我认为我可以运行具有该名称的新容器。

并非如此。仅仅是因为容器已停止,并不意味着它不能再次启动,并且保留了与创建容器时相同的所有参数(包括名称)。

我跑的时候 docker ps -a时,我看到了我在玩耍时创建的所有虚拟测试容器。

没问题,因为我不再想要那些docker rm containername了,这时我的新容器可以使用旧名称运行。

嗯,既然我已经写完了这个答案,那么我会看到Slawosz对Walt Howard的答案的评论,暗示了使用 docker ps -a

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.