来自守护程序的Docker错误响应:“冲突...已被容器使用”


135

我一直在PC上使用Docker来运行Quantum GIS,并遵循以下说明:docker-qgis-desktop-运行QGIS桌面的简单Docker容器

一切正常,直到上周我开始收到此错误消息时:

Error response from daemon: Conflict. 
The name "qgis-desktop-2-4" is already in use by container 235566ae17b8. 
You have to delete (or rename) that container to be able to reuse that name.

尽管在此站点上寻找了线索,但我不确定是什么意思。在此之前,我没有做任何更改,并且已经使用以下命令成功启动了容器:

sudo docker run --rm --name="qgis-desktop-2-4"     -i -t     -v ${HOME}:/home/${USER}     -v /tmp/.X11-unix:/tmp/.X11-unix     -e DISPLAY=unix$DISPLAY     kartoza/qgis-desktop:latest

我怎样才能解决这个问题?

Answers:


217

看起来qgis-desktop-2-4该系统中已经存在名称相同的容器。您可以检查以下命令的输出以确认是否确实存在:

$ docker ps -a

上面命令输出中的最后一列是名称。

如果容器存在,请使用以下方法将其删除:

$ docker rm qgis-desktop-2-4

或强行使用

$ docker rm -f qgis-desktop-2-4

然后尝试创建一个新的容器。


嘿@Dharmit感谢您的评论。我尝试了一下,但现在收到以下错误消息groupadd: GID '0' already exists useradd: user 'root' already exists No protocol specified Warning: qgis.bin: cannot connect to X server unix:0.0
marty_c 2015年

似乎该映像试图使用户成为root,并且实际上已经存在一个root用户组。Docker使用root:root作为默认用户和组。但是,当您删除第一个容器时,第一个问题已修复。
luxas

嗯,很奇怪,为什么从3-4个月开始就可以正常工作了。有什么想法可以解决吗?
marty_c 2015年

1
我们如何才能重新启动现有容器而不是杀死旧容器并再次调用相同名称?
Dhanesh Mane

13
@DhaneshMane docker restartdocker stopdocker start应该可以帮助您。
Dharmit '16

34

代替命令: docker run

您应该使用:

docker start **CONTAINER ID**

因为该容器已经存在

更多信息


1
'docker start'没有提供启用主机网络连接,从命令行挂载卷的选项以及我需要的其他选项。所以我个人不得不删除(修剪)然后运行。
HH-向

1
@horsehair当我使用docker start <myContainerName>时,它将重新建立所有公开的端口和卷安装。因此,取决于您最初运行容器的方式,这些设置应通过docker start解决。
djchapm

是的,这很糟糕,因为我希望它可以双向运行。它不是很幂等:(。哦,我想我必须在bash脚本中做一些逻辑研究
Dean Hiller

9

我收到了很多此错误,所以现在我一次批量删除所有未使用的容器:

docker container prune 

添加-f强制删除不及时。

列出所有未使用的容器(不删除):

docker container ls -a --filter status=exited --filter status=created 

请参见此处的更多示例,如何修剪其他对象(网络,卷等)。


8

对于像我这样从Google登陆到这里的人,他们只想使用带有一个共享服务的多个docker-compose文件来构建容器:

有时您会共享不同的项目,例如数据库docker容器。仅第一次运行应启动DB-Docker,第二次应检测到数据库已在运行,并跳过此步骤。为了实现这种行为,我们需要Docker放置在相同的网络项目中。另外,docker容器名称也必须相同。

1st:在docker-compose中设置相同的网络和容器名称

docker-compose在项目1中:

version: '3'

services:
    service1:
        depends_on:
            - postgres
        # ...
        networks:
            - dockernet

    postgres:
        container_name: project_postgres
        image: postgres:10-alpine
        restart: always
        # ...
        networks:
            - dockernet

networks:
    dockernet:

docker-compose在项目2中:

version: '3'

services:
    service2:
        depends_on:
            - postgres
        # ...
        networks:
            - dockernet

    postgres:
        container_name: project_postgres
        image: postgres:10-alpine
        restart: always
        # ...
        networks:
            - dockernet

networks:
    dockernet:

第二:使用-p param设置相同的项目,或将两个文件放在同一目录中。

docker-compose -p {projectname} up

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.