【问题标题】:Docker - Name is already in use by containerDocker - 名称已被容器使用
【发布时间】:2015-10-20 06:42:11
【问题描述】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 所以在这种情况下使用docker ps -a查看所有容器也很重要。
    • 是的,docker start -a container-name 是您可以用来启动使用docker run 创建的容器的命令。注意-a 标志,它是--attach 的简写。这样容器在前台启动,就像你使用docker run(默认在前台运行容器)一样。
    • start 命令是否使用相同的设置(端口、依赖项等)重新运行容器?
    • @Suncatcher 是的。
    【解决方案2】:

    这意味着你过去已经使用参数启动了一个容器

    docker run --name registry-v1 ...
    

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

    docker rm registry-v1
    

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

    docker stop registry-v1
    

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

    要获取现有容器及其名称的列表,只需调用

    docker ps -a
    

    【讨论】:

    • 但是为什么那些被停止的呢?或者如果他们停止了,他们仍然在那里有什么好处?
    • 因此您可以稍后运行它们而无需重新创建它们
    • 所以您基本上是在说“这样您就可以运行一次映像(即生成容器然后在其中运行命令),然后根据需要多次启动容器”。但是为什么我们只需要运行一次呢?甚至没有持久化“某事”对容器所做的可能更改(请记住,除非提交,否则 docker 容器状态更改会丢失)。
    • 如果您知道容器的名称,可以使用此快捷方式 docker rm $(docker ps -aq --filter name=myContainerName) 将其删除
    • @JujharSingh 为什么不只是docker rm myContainerName
    【解决方案3】:

    这是我做的,效果很好。

    第 1 步:(列出 docker 容器及其名称)

    docker ps -a
    

    第 2 步:

    docker rm name_of_the_docker_container
    

    【讨论】:

    • 这对我很有帮助,“docker ps”不直观地需要 -a 标志来返回任何东西。
    • docker ps 只返回正在运行的容器,并且需要 -a 来列出已停止的容器。
    【解决方案4】:

    只是为了解释其他人在说什么(我花了一些时间才理解),简单地说,当你看到这个错误时,这意味着你已经有了一个容器,你要做的就是运行它。虽然直观地 docker run 应该运行它,但它没有。命令docker run 仅用于第一次START容器。要运行现有容器,您需要 docker start $container-name。要求开发人员创建有意义/直观的命令非常重要。

    【讨论】:

    • docker run = 创建 docker 容器 + 启动 docker 容器
    【解决方案5】:

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

    --rm        Automatically remove the container when it exits
    

    例如

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

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

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

    【讨论】:

    • 图片还是容器?
    • 容器从构建的镜像运行。大致类似于类定义(图像)和类实例(容器)。
    • 先说容器,再说镜像。这还不清楚。此外,如果该映像的容器已经在运行,则在使用--rm 后它将继续运行。它不会重新启动。
    • 请注意:--rm 仅在您使用 --rm 标志创建容器时才有效。这意味着,如果您创建的容器没有 --rm 标志,则必须手动将其删除,然后才能利用 rm 标志。
    【解决方案6】:

    您有 2 个选项可以解决此问题...

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

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

    您收到此错误是因为该容器名称(即registry-v1)过去曾被另一个容器使用...即使该容器可能已退出(即当前未使用)。

    【讨论】:

      【解决方案7】:

      原因

      同名容器仍然存在。

      解决方案

      要重复使用相同的容器名称,请通过以下方式删除现有容器:

      docker rm <container name>
      

      说明

      容器可以存在以下状态,在此期间容器名称不能用于另一个容器:

      • created
      • restarting
      • running
      • paused
      • exited
      • dead

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

      docker ps
      

      要显示所有状态的容器并确定是否使用了容器名称,请使用:

      docker ps -a
      

      【讨论】:

      • 如果希望重新使用容器,那么 --rm 不是合适的开关。一个简单的“docker start {container name}”就足够了。
      【解决方案8】:

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

      1. $ sudo docker ps -a
      2. 复制容器 ID

      为每个容器做:

      1. $ sudo docker stop container_ID
      2. $ sudo docker rm container_ID

      【讨论】:

        【解决方案9】:

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

        错误如下:

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

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

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

        sudo docker rm --force <container_id>
        

        【讨论】:

          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

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

            1. 键入docker ps -a 列出系统中的所有容器。
            2. 检查初始化 docker 容器的 NAMES 部分。
            3. 然后输入docker rm --force name_of_container
            4. 根据需要安装 docker 容器。

            我在使用 NIFI 时遇到问题,我已使用 docker 删除并重新安装。祝你好运。

            【讨论】:

              【解决方案12】:

              移除所有退出的容器

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

              【讨论】:

                【解决方案13】:

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

                错误:没有这样的图像

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

                docker container prune
                

                【讨论】:

                  【解决方案14】:

                  我只是在学习 docker,这也让我受益匪浅。我已经停止了具有该名称的容器,因此我认为我可以运行具有该名称的新容器。

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

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

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

                  啊,现在我写完了这个答案,我看到 Slawosz 对 Walt Howard 的上述回答的评论建议使用 docker ps -a

                  【讨论】:

                    【解决方案15】:

                    TL:DR;

                    列出所有容器:
                    docker ps -a
                    按 id 移除相关容器:
                    docker container rm &lt;container_id&gt;

                    【讨论】:

                      【解决方案16】:

                      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
                      

                      【讨论】:

                        【解决方案17】:

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

                        【讨论】:

                          【解决方案18】:

                          简单的解决方案:转到系统中的 docker 文件夹并删除 .raw 文件或大尺寸的 docker 存档。

                          【讨论】:

                            【解决方案19】:

                            好吧,所以我也不懂,然后我离开了我的电脑,去做其他事情,然后在我回来时,它点击了: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 (port) - 指定容器端口和主机端口。内部和外部端口的种类。内部端口是容器使用的端口,外部端口是您在其外部使用的端口,如果这是您访问应用程序的方式,您可能需要将其放入网络浏览器中。

                            --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 run 不只是创建容器。它创建 + 启动容器。
                            【解决方案20】:

                            对我来说,问题是我在 dockerfile 中多次使用了一个图像名称。

                            【讨论】:

                            • 多张图片使用同一个别名时可能会出现此错误
                            猜你喜欢
                            • 1970-01-01
                            • 2018-12-16
                            • 1970-01-01
                            • 1970-01-01
                            • 2016-09-11
                            • 2016-03-11
                            • 2015-10-31
                            • 1970-01-01
                            相关资源
                            最近更新 更多