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.

如何避免这种错误?

582392 次浏览

这意味着您已经在过去使用该参数启动了容器

docker run --name registry-v1 ...

您需要先删除它,然后才能重新创建具有相同名称的容器

docker rm registry-v1

当容器仍在运行时,您需要先停止它,然后才能删除它

docker stop registry-v1

或者直接为新容器选择一个不同的名称。

来获取现有容器及其名称的列表

docker ps -a

我也被这个弄糊涂了。这里有两个相关命令:

docker run  # Run a command in a **new** container
docker start  # Start one or more stopped containers

你有两个选择来解决这个问题…

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

    或者< / p >

  2. 将当前容器重命名为不同的名称,例如将--name registry-v1部分更改为--name myAnotherContainerName

你得到这个错误是因为容器名称(即registry-v1)在过去被另一个容器使用…即使该容器可能已经退出,即(当前没有使用)。

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

重新启动一个现有的容器

我正在学习docker,这也让我。我已经停止使用该名称的容器,因此我认为我可以使用该名称运行一个新容器。

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

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

没问题,因为我不想再要这些了,我只是做了docker rm containername,此时我的新容器被允许使用旧名称运行。

啊,现在我写完了这个答案,我看到斯拉沃兹对沃尔特·霍华德的回答的评论,建议使用docker ps -a

导致

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

解决方案

若要重复使用相同的容器名称,请删除现有的容器:

docker rm <container name>

解释

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

  • # EYZ0
  • # EYZ0
  • # EYZ0
  • # EYZ0
  • # EYZ0
  • # EYZ0

你可以使用下面的命令查看处于running状态的容器:

docker ps

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

docker ps -a

这里我所做的,它工作得很好。

第一步:(它列出了docker容器的名称)

docker ps -a

步骤2:

docker rm name_of_the_docker_container

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

--rm        Automatically remove the container when it exits

如。

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

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

编辑:阅读下面Lepe的评论。

只是解释一下其他人所说的(我花了一些时间来理解),简单地说,当您看到这个错误时,这意味着您已经有了一个容器,您需要做的就是运行它。虽然直觉上认为docker run应该运行它,但它并没有。命令docker run第一次只用于容器开始。要运行一个现有的容器,您需要docker start $container-name。要求开发人员创建有意义的/直观的命令已经说得够多了。

我已经通过以下步骤解决了这个问题,希望能有所帮助。

  1. 输入docker ps -a列出系统中的所有容器。
  2. 检查已初始化docker容器的NAMES部分。
  3. 然后输入docker rm --force name_of_container
  4. 按照您的意愿安装docker容器。

我有问题使用NIFI,我已经删除和重新安装使用docker。祝你好运。

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

  1. # EYZ0
  2. 复制容器ID

对于每个容器,请:

  1. # EYZ0
  2. # EYZ0

这个问题:你试图创建新的容器,而在后台的同名容器正在运行,这种情况会导致冲突。

这个错误是这样的:

不能为服务X创建容器:冲突。容器abc123xyz已经使用了名称X。您必须删除或删除(或重命名)该容器才能重用该名称。

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

  1. 获取所有正在运行的容器sudo docker ps -a
  2. 得到具体的容器id
  3. 停止并移除重复的容器/强制移除它
sudo docker stop <container_id>
sudo docker rm <container_id>

sudo docker rm --force <container_id>

简单的解决方法:找到系统中的docker文件夹,删除。raw文件或较大的docker归档文件。

好吧,所以我也不明白,然后我离开了我的电脑,去做其他的事情,当我回来时,它点击:D

  1. 你下载一个docker镜像文件。docker pull *image-name*将只是从docker hub中提取映像,而不运行它。

  2. 现在,你使用docker运行,并给它一个名字(例如newWebServer)。

    # EYZ0

您可能只需要docker run --name *name* *image*,但其他东西很快就会有用。

-d (detached) -表示当用于运行容器的根进程退出时,容器将退出。

-p (port) -指定容器端口和主机端口。内部和外部端口。内部的是容器使用的端口,外部的是你在容器外部使用的端口,如果这是你访问应用程序的方式,它可能是你需要放在浏览器中的端口。

--name(你想给容器的实例起什么名字)——你可以有相同容器的几个实例,它们都有不同的名字,这在你试图测试一些东西的时候很有用。

image-name/version是您想要从中创建容器的实际映像。您可以使用docker images -a看到系统中所有图像的列表。您可能有多个版本,因此请确保选择正确的/标记。

-v (volume)——最初可能不需要,但很快您就会希望在容器退出后持久化数据。

好的。docker run刚刚从映像创建了一个容器。如果它没有运行,你现在可以用它的名字启动它:

docker start newWebServer

您可以检查所有容器(它们可能正在运行,也可能没有运行)

docker ps -a

你可以通过container id列中的容器名称或容器id(或者只是容器id的前几个字符)来停止和启动它们(或暂停它们),例如:

docker stop newWebServer


docker start c3028a89462c

并列出你所有的图片,与

docker images -a

简单地说,下载一个图像;Docker运行从它创建一个容器;使用docker Start(名称或容器id)启动它;用docker Stop(名称或容器id)停止它。

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

错误:没有这样的图像

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

docker container prune

TL:博士;

列出所有容器:
# EYZ0 < br > 删除相关容器id:
# EYZ0 < / p >

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

删除所有退出的容器

docker rm $(docker ps -a -f status=exited -q)

对我来说,问题在于我在dockerfile中不止一次地使用了一个映像名。

enter image description here

我遇到这个问题是因为我在docker-compose中有两个或多个容器具有相同的container_name。yml文件。

我在docker教程上就遇到过这种情况!我尝试使用的端口被占用,但docker仍然创建..一个图像?一个进程运行docker?我很快就知道了。无论如何,为了选择一个不同的端口,我必须删除旧的映像,然后docker再次运行。

有时候教程可能太过简洁。你想要的是简洁,而不是简练,甚至是简练。