デーモンからのDockerエラー応答:「競合…コンテナですでに使用されています」


135

私のPCでDockerを使用して、Quantum GISをここで見つけた次の手順で実行しています:docker-qgis-desktop-QGISデスクトップを実行する単純なドッキングコンテナー

先週、このエラーメッセージが表示されるようになるまで、すべてが順調に進んでいます。

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

どうすれば修正できますか?

回答:


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

画像はユーザーをルートにしようとしているようで、ルートグループは実際にはすでに存在しています。Dockerはデフォルトのユーザーおよびグループとしてroot:rootを使用します。ただし、最初のコンテナを削除すると、最初の問題が修正されます。
luxas

うーん、変なので、なぜ最初から3〜4か月で正常に機能していたのですか。これを修正するために私ができることはありますか?
marty_c 2015

1
古いコンテナーを強制終了して同じ名前で再度呼び出すのではなく、既存のコンテナーを再起動する方法
Dhanesh Mane 2016

13
@DhaneshMane docker restart、またはdocker stopdocker startが役立つはずです。
Dharmit

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からここに着陸し、1つの共有サービスで複数のdocker-composeファイルを使用してコンテナーを構築したい場合:

たとえば、データベースDockerコンテナーを共有するさまざまなプロジェクトがある場合があります。最初の実行でのみDB-Dockerが開始され、2回目の実行ではDBがすでに実行されていることが検出され、これはスキップされます。このような動作を実現するには、Dockerが同じネットワークと同じプロジェクトに配置される必要があります。また、Dockerコンテナー名は同じである必要があります。

1番目: docker-composeで同じネットワークとコンテナー名を設定する

プロジェクト1のdocker-compose:

version: '3'

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

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

networks:
    dockernet:

プロジェクト2のdocker-compose:

version: '3'

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

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

networks:
    dockernet:

2番目:-p paramを使用して同じプロジェクトを設定するか、両方のファイルを同じディレクトリに配置します。

docker-compose -p {projectname} up

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.