Docker - 名称已被容器使用

699

使用以下命令运行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.

我该如何防止这个错误?

22个回答

13

我遇到了这样的问题,当我运行docker rm时(通常是有效的),我会收到以下错误消息:

错误:没有这样的镜像

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

docker container prune

11

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


8

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

  1. 输入 docker ps -a 来列出系统中的所有容器。
  2. 检查容器名称,看看您是否在初始化 Docker 容器时使用了正确的名称。
  3. 然后输入 docker rm --force name_of_container 删除该容器。
  4. 按您的需求安装 Docker 容器。

我曾在使用 NIFI 时遇到问题,但通过使用 Docker 进行了移除和重新安装。祝好运!


6

简述:

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


6

OP的问题是错误。删除状态不是唯一的解决办法 - 甚至不是一个好的解决办法。问题在于docker run不是可重入的,而且没有rundocker start是无效的。因此,我们必须将它们合并。

例如,要在不销毁先前状态的情况下运行Postgres,请尝试以下操作:

docker start postgres || docker run -d -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=password postgres:13-alpine

这是这里唯一真正有用的答案。 - Synesso

4
我正在学习Docker,这个问题也困扰了我。我已经停止了该名称的容器,因此我认为我可以使用该名称运行新容器。

但事实并非如此。即使容器已停止,也不意味着它不能再次启动,并且它保留了创建时的所有参数(包括名称)。

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

没关系,由于我不再需要它们,我只需运行docker rm containername,然后我的新容器就可以使用旧名称运行了。

噢,现在我写完这篇答案后,我看到Slawosz在Walt Howard上面的答案中建议使用docker ps -a


3

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


3

好的,我之前也不理解,然后离开了我的电脑去做其他事情,等我回来时,一下就明白了 :D

  1. 下载docker镜像文件。docker pull *image-name*只会从docker hub拉取镜像而不运行它。

  2. 现在,你使用docker run命令并给它一个名称(例如newWebServer)。

    docker run -d -p 8080:8080 -v volume --name newWebServer image-name/version

或许你只需要docker run --name *name* *image*,但是其他选项很快就会变得有用。

-d(分离模式)- 这意味着当用于运行容器的根进程退出时,容器将退出。

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

--name (你想要称此容器实例的名称)- 你可以拥有几个相同容器的实例,所有实例都有不同的名称,在测试某些东西时非常有用。

image-name/version 是你想从中创建容器的实际镜像。你可以使用docker images -a命令查看系统上的所有镜像。您可能会有多个版本,因此确保选择正确的版本/标记。

-v (卷)- 在最初可能不需要,但很快你将想要在容器退出后持久保存数据。

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

docker start newWebServer

您可以使用以下命令检查所有容器(它们可能正在运行,也可能没有):

docker ps -a

您可以通过容器名称或容器 ID(或其前几个字符)从CONTAINER ID列停止、启动(或暂停)它们,例如:
docker stop newWebServer

docker start c3028a89462c

列出所有的图片,使用
docker images -a

简而言之,下载镜像;使用docker run从镜像创建容器;使用docker start(名称或容器id)启动容器;使用docker stop(名称或容器id)停止容器。

docker run 不仅创建容器,还会启动容器。 - tintin

0
对我来说,问题在于我在dockerfile中多次使用了同一张图片的名称。

enter image description here


2
当为多个图像使用相同的别名时,可能会出现此错误。 - Suciu Eus

0
简单解决方案:进入系统中的docker文件夹,删除大小较大的.raw文件或docker归档文件即可。

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