docker run - > name已被容器使用

Rub*_*tic 321 docker

使用以下命令运行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.
Run Code Online (Sandbox Code Playgroud)

如何防止此错误?

Wal*_*ard 373

我也对此感到困惑.这里有两个相关的命令:

docker run容器中运行命令

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

  • 因此,在这种情况下使用`docker ps -a`来查看所有容器也很重要. (81认同)
  • 是的,`docker start -a container-name`是您可以用来启动用docker run创建的容器的命令。注意`-a`标志,它是--attach的简写。这样,容器就在前台启动,就像您使用docker run一样(默认情况下在前台运行容器)。 (6认同)
  • 这是我为了重新运行Docker容器而寻找的答案.谢谢! (5认同)
  • “start”命令是否使用相同的设置(端口、依赖项等)重新运行容器? (2认同)
  • @Suncatcher 是的。 (2认同)

h3n*_*rik 156

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

在重新创建具有相同名称的容器之前,您需要先删除它docker rm registry-v1.当该容器运行时,您需要先将其停止,然后才能将其删除docker stop registry-v1.或者只是为新容器选择一个不同的名称.

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

  • 如果您知道容器的名称,可以使用此快捷方式删除它`docker rm $(docker ps -aq --filter name = myContainerName) (13认同)
  • 但为什么那些被停止的?或者如果他们停在那里他们还在那里会有什么好处? (4认同)
  • 因此,您以后可以运行它们而无需重新创建它们 (2认同)
  • 所以你基本上说"这样你就可以运行一次图像(即生成容器然后在其中运行命令),然后按照你的意愿多次启动容器".但为什么我们只需要运行一次?甚至没有坚持对容器做出"某事"的可能更改(记住,除非已提交,否则将丢失docker容器状态更改). (2认同)
  • @JujharSingh为什么不仅要`docker rm myContainerName`? (2认同)

Tha*_*han 115

在这里我做了什么,它工作正常.

第1步:(它列出了具有名称的docker容器)

docker ps -a
Run Code Online (Sandbox Code Playgroud)

第2步:

docker rm name_of_the_docker_container
Run Code Online (Sandbox Code Playgroud)

  • 这对我很有帮助,“ docker ps”直观上需要-a标志以返回任何内容。 (3认同)
  • docker ps 仅返回正在运行的容器,并且需要 -a 来列出甚至已停止的容器。 (2认同)

mit*_*aul 41

只是为了解释其他人在说什么(我花了一些时间来理解):简单地说,当你看到这个错误时,它意味着你已经有了一个容器,你要做的就是运行它.虽然直觉docker run应该运行,但事实并非如此.该命令docker run仅用于第一次启动容器.要运行现有容器,您需要的是什么docker start $container-name.这要求开发人员创建有意义/直观的命令.


Edw*_*kwu 29

你有2个选项来解决这个问题......

  1. 使用该命令删除使用该名称的上一个容器 docker rm $(docker ps -aq --filter name=myContainerName)

    要么

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

您收到此错误,因为该容器名称(即registry-v1)过去被另一个容器使用...即使该容器可能已退出ie(当前未使用).


Mar*_*tin 21

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

--rm        Automatically remove the container when it exits
Run Code Online (Sandbox Code Playgroud)

例如

docker run --name my-micro-service --rm <image>
Run Code Online (Sandbox Code Playgroud)

可悲的是,它在文档的示例中几乎是随机使用的

  • 请注意:“--rm”仅在您使用“--rm”标志创建容器时才有效。这意味着,如果您创建的容器没有使用“--rm”标志,则必须手动将其删除,然后才能利用“rm”标志。 (20认同)
  • 容器是从构建的镜像运行的。大致类似于类定义(图像)和类实例(容器)。 (2认同)

小智 19

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

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

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

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


Rod*_*son 17

原因

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

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

docker rm <container name>
Run Code Online (Sandbox Code Playgroud)

说明

容器可以存在于以下状态,在此期间容器名称不能用于另一个容器:

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

您可以running使用以下方法查看状态中的容器:

docker ps
Run Code Online (Sandbox Code Playgroud)

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

docker ps -a
Run Code Online (Sandbox Code Playgroud)


avi*_*amg 11

问题:您在后台运行同名容器时尝试创建新容器,这种情况会导致冲突。

错误将是这样的:

无法为服务 X 创建容器:冲突。名称 X 已被容器abc123xyz使用。您必须删除或重命名该容器才能重用该名称。

解决方案重命名服务名docker-compose.yml或删除正在运行的容器并重新构建(此解决方案与Unix/Linux/macOS系统相关):

  1. 获取所有正在运行的容器 sudo docker ps -a
  2. 获取特定的容器 ID
  3. 停止并移除重复的容器/强制移除它
sudo docker stop <container_id>
sudo docker rm <container_id>
Run Code Online (Sandbox Code Playgroud)

或者

sudo docker rm --force <container_id>
Run Code Online (Sandbox Code Playgroud)


don*_*lei 10

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


Nij*_*ali 8

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

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

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


Ola*_*umi 6

TL:博士;

列出所有容器:
docker ps -a
通过id删除相关容器:
docker container rm <container_id>


Mic*_*ole 6

OP的问题是错误。删除状态并不是唯一的解决方案,甚至不是一个好的解决方案。问题是docker run不可重入,并且docker start无能为力run。所以我们必须将它们结合起来。

例如,要运行 Postgres 而不破坏以前的状态,请尝试以下操作:

docker start postgres || docker run -d -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=password postgres:13-alpine
Run Code Online (Sandbox Code Playgroud)


Pot*_*rca 5

我遇到了这个问题,当我运行docker rm(通常有效)时,我会得到:

错误:没有这样的图像

最简单的解决方案是通过运行删除所有停止的容器:

docker container prune
Run Code Online (Sandbox Code Playgroud)


max*_*max 5

删除所有退出的容器

docker rm $(docker ps -a -f status=exited -q)
Run Code Online (Sandbox Code Playgroud)