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

如何避免这种错误?


当前回答

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

错误是这样的:

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

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

获取所有正在运行的容器sudo docker ps -a 获取特定的容器id 停止并移除重复的容器/强制移除它

sudo docker stop <container_id>
sudo docker rm <container_id>

or

sudo docker rm --force <container_id>

其他回答

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

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

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

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

使用docker rm $(docker ps -aq——filter name=myContainerName)命令删除之前的容器。 或 将当前容器重命名为另一个名称,即将这部分——name registry-v1更改为——name myAnotherContainerName

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

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

docker run --name registry-v1 ...

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

docker rm registry-v1

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

docker stop registry-v1

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

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

docker ps -a

OP的问题是错误。删除状态并不是唯一的解决方案——甚至不是一个好的解决方案。问题是docker运行不能重入,并且docker启动是无效的w/o运行。所以我们要把它们结合起来。

例如,要运行Postgres而不破坏之前的状态,试试这个:

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