使用以下命令运行 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.
我怎样才能防止这个错误?
我也被这个弄糊涂了。这里有两个相关的命令:
docker run # Run a command in a **new** container
docker start # Start one or more stopped containers
这意味着您过去已经使用参数启动了一个容器
docker run --name registry-v1 ...
您需要先删除它,然后才能重新创建具有相同名称的容器
docker rm registry-v1
当该容器正在运行时,您需要先停止它,然后才能删除它
docker stop registry-v1
或者干脆为新容器选择一个不同的名称。
要获取现有容器及其名称的列表,只需调用
docker ps -a
docker rm $(docker ps -aq --filter name=myContainerName)
将其删除
docker rm myContainerName
?
这是我所做的,它工作正常。
第 1 步:(它列出了 docker 容器及其名称)
docker ps -a
第2步:
docker rm name_of_the_docker_container
只是为了解释其他人在说什么(我花了一些时间才理解),简单地说,当你看到这个错误时,这意味着你已经有了一个容器,你要做的就是运行它。虽然直观地 docker run
应该运行它,但它没有。命令 docker run
仅用于第一次START容器。要运行现有容器,您需要 docker start $container-name
。要求开发人员创建有意义/直观的命令非常重要。
当你构建一个新镜像时,你通常希望每次都运行一个同名的新容器。我发现最简单的方法是使用 --rm 选项启动容器:
--rm Automatically remove the container when it exits
例如
docker run --name my-micro-service --rm <image>
遗憾的是,它在 docs 的示例中几乎是随机使用的
编辑:阅读下面 Lepe 的评论。
--rm
后它将继续运行。它不会重新启动。
--rm
仅在您使用 --rm
标志创建容器时才有效。这意味着,如果您创建的容器没有 --rm
标志,则必须手动将其删除,然后才能利用 rm
标志。
您有 2 个选项来解决此问题...
使用该名称删除以前的容器,使用命令 docker rm $(docker ps -aq --filter name=myContainerName) 或将当前容器重命名为不同的名称,即将这部分 --name registry-v1 更改为 --name myAnotherContainerName
您收到此错误是因为该容器名称(即 registry-v1
)过去曾被另一个容器使用...即使该容器可能已退出,即(当前未使用)。
原因
同名的容器仍然存在。
解决方案
要重复使用相同的容器名称,请通过以下方式删除现有容器:
docker rm <container name>
解释
容器可以存在以下状态,在此期间容器名称不能用于另一个容器:
创建
重启
跑步
暂停
退出
死的
您可以使用以下命令查看处于 running
状态的容器:
docker ps
要显示所有状态的容器并确定是否使用了容器名称,请使用:
docker ps -a
这是我在 ubuntu 18 上解决这个问题的方法:
$ sudo docker ps -a 复制容器 ID
对于每个容器,请执行以下操作:
$ sudo docker stop container_ID $ sudo docker rm container_ID
问题:您尝试在后台运行同名容器时创建新容器,这种情况会导致冲突。
错误将是:
无法为服务 X 创建 continer:冲突。名称 X 已被容器 abc123xyz 使用。您必须删除或删除(或重命名)该容器才能重用该名称。
解决方案重命名docker-compose.yml
中的服务名称或删除正在运行的容器并重新构建(此解决方案与Unix/Linux/macOS系统有关):
获取所有正在运行的容器 sudo docker ps -a 获取特定的容器 ID 停止并删除重复的容器/强制删除它
sudo docker stop <container_id>
sudo docker rm <container_id>
或者
sudo docker rm --force <container_id>
您可以使用命令 sudo docker rm YOUR_CONTAINER_ID
将其删除,然后使用 sudo docker run ...
运行一个新容器;或使用 sudo docker start YOUR_CONTAINER_ID
重新启动现有容器
删除所有退出的容器
docker rm $(docker ps -a -f status=exited -q)
我已经通过执行以下步骤解决了这个问题,希望对您有所帮助。
键入 docker ps -a 以列出系统中的所有容器。检查初始化 docker 容器的 NAMES 部分。然后输入 docker rm --force name_of_container 根据需要安装 docker 容器。
我在使用 NIFI 时遇到问题,我已使用 docker 删除并重新安装。祝你好运。
我遇到了这个问题,当我运行 docker rm
(通常有效)时,我会得到:
错误:没有这样的图像
最简单的解决方案是通过运行删除所有停止的容器:
docker container prune
我只是在学习 docker,这也让我受益匪浅。我已经停止了具有该名称的容器,因此我认为我可以运行具有该名称的新容器。
不是这样。仅仅因为容器已停止,并不意味着它不能再次启动,并且它保留了创建它时使用的所有相同参数(包括名称)。
当我运行 docker ps -a
时,我看到了我在玩耍时创建的所有虚拟测试容器。
没问题,因为我不再想要这些了,所以我刚刚做了 docker rm containername
,此时允许我的新容器使用旧名称运行。
啊,现在我写完这个答案,我看到 Slawosz 对 Walt Howard 的上述回答的评论建议使用 docker ps -a
TL:博士;
列出所有容器:
docker ps -a
按 id 删除相关容器:
docker container rm <container_id>
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-compose.yml 文件中有两个或多个具有相同 container_name
的容器。
好的,所以我也不明白,然后我离开了我的电脑,去做其他事情,然后在我回来时,它点击了:D
你下载一个 docker 镜像文件。 docker pull *image-name* 只会从 docker hub 拉取图像而不运行它。现在,您使用 docker run,并为其命名(例如 newWebServer)。 docker run -d -p 8080:8080 -v volume --name newWebServer image-name/version
您可能只需要 docker run --name *name* *image*
,但其他东西很快就会变得有用。
-d
(分离)- 表示容器将在用于运行容器的根进程退出时退出。
-p
(端口)- 指定容器端口和主机端口。内部和外部端口的种类。内部端口是容器使用的端口,外部端口是您在其外部使用的端口,如果这是您访问应用程序的方式,则可能需要放入 Web 浏览器中。
--name
(您要调用此容器实例)- 您可以拥有同一个容器的多个实例,它们都具有不同的名称,这在您尝试测试某些内容时很有用。
image-name/version
是您要从中创建容器的实际图像。您可以使用 docker images -a
查看系统上所有图像的列表。您可能有多个版本,因此请确保选择正确的版本/标签。
-v
(体积)- 最初可能不需要,但很快您就会希望在容器退出后保留数据。
好的。所以现在, docker run 刚刚从你的镜像创建了一个容器。如果它没有运行,您现在可以使用它的名称启动它:
docker start newWebServer
您可以使用以下命令检查所有容器(它们可能正在运行或未运行)
docker ps -a
您可以使用 CONTAINER ID 列中的名称或容器 ID(或仅它的前几个字符)停止和启动它们(或暂停它们),例如:
docker stop newWebServer
docker start c3028a89462c
并列出您的所有图像,
docker images -a
简而言之,下载图像; docker run 从中创建一个容器;使用 docker start(名称或容器 ID)启动它;使用 docker stop (名称或容器 ID)停止它。
简单的解决方案:转到系统中的 docker 文件夹并删除大尺寸的 .raw 文件或 docker 存档。
对我来说,问题是我在 dockerfile 中不止一次使用了图像名称。
https://i.stack.imgur.com/2oAKe.png
docker ps -a
查看所有容器也很重要。docker start -a container-name
是您可以用来启动使用docker run
创建的容器的命令。请注意-a
标志,它是--attach
的简写。这样容器在前台启动,就像使用docker run
时一样(默认情况下在前台运行容器)。start
命令是否使用相同的设置(端口、依赖项等)重新运行容器?