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

如何避免这种错误?


当前回答

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

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

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

其他回答

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

导致

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

解决方案

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

docker rm <container name>

解释

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

创建 重新启动 运行 停顿了一下 退出 死

你可以通过以下命令查看运行状态的容器:

docker ps

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

docker ps -a

删除所有退出的容器

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

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

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

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

docker ps -a

步骤2:

docker rm name_of_the_docker_container