Docker-Fehlerantwort vom Daemon: "Konflikt ... wird bereits vom Container verwendet"

135

Ich habe Docker auf meinem PC verwendet, um Quantum GIS mit den folgenden Anweisungen auszuführen, die ich hier gefunden habe: docker-qgis-desktop - Ein einfacher Docker-Container, auf dem QGIS-Desktop ausgeführt wird

Bis letzte Woche, als ich diese Fehlermeldung erhielt, lief alles einwandfrei:

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.

Ich bin mir nicht ganz sicher, was dies bedeutet, obwohl ich auf dieser Seite nach Hinweisen gesucht habe. Ich hatte vor diesem Ereignis nichts geändert und den Container mit diesem Befehl erfolgreich gestartet:

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

Wie kann ich das beheben?

marty_c
quelle

Antworten:

217

Es sieht so aus, als ob ein Container mit dem Namen qgis-desktop-2-4bereits im System vorhanden ist. Sie können die Ausgabe des folgenden Befehls überprüfen, um zu bestätigen, ob er tatsächlich vorhanden ist:

$ docker ps -a

Die letzte Spalte in der Ausgabe des obigen Befehls enthält Namen.

Wenn der Container vorhanden ist, entfernen Sie ihn mit:

$ docker rm qgis-desktop-2-4

Oder mit Gewalt verwenden,

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

Versuchen Sie dann, einen neuen Container zu erstellen.

Dharmit
quelle
hey @Dharmit danke für den Kommentar. Ich habe das versucht, aber jetzt bekomme ich die folgende Fehlermeldunggroupadd: 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
Es scheint, als ob das Image versucht, den Benutzer zu root zu machen, und eine Root-Gruppe, die beide tatsächlich bereits existieren. Docker verwendet root: root als Standardbenutzer und -gruppe. Das erste Problem wurde jedoch behoben, als Sie den ersten Container entfernt haben.
Luxas
hmm, komisch also warum hat es gut funktioniert mit 3 - 4 Monaten zu beginnen. Irgendwelche Ideen, was ich tun kann, um das zu beheben?!
Marty_c
1
Wie können wir einfach einen vorhandenen Container neu starten, anstatt den alten zu beenden und erneut mit demselben Namen aufzurufen?
Dhanesh Mane
13
@DhaneshMane docker restartoder docker stop& docker startsollte dir helfen.
Dharmit
34

Anstelle des Befehls: docker run

Du solltest benutzen:

docker start **CONTAINER ID**

weil der Container bereits vorhanden ist

Mehr Info

Nasir Taha
quelle
1
'Docker Start' bietet keine Optionen zum Aktivieren des Host-Netzwerks, zum Mounten von Volumes über die Befehlszeile und andere Optionen, die in meinem Fall erforderlich sind. Also musste ich persönlich löschen (beschneiden) und dann laufen.
HH- Entschuldige dich bei Carole Baskin
1
@horsehair Wenn ich Docker-Start <myContainerName> verwende, werden alle exponierten Ports und Volume-Mounts wiederhergestellt. Abhängig davon, wie Sie Ihren Container ursprünglich ausgeführt haben, sollten diese Einstellungen mit dem Docker-Start aufgelöst werden.
Djchapm
Ja, diese Art von Scheiße ist scheiße, weil ich möchte, dass es in beide Richtungen funktioniert ... Start / Run für Entwickler, die dem Team beitreten, und für Entwickler, die es schon einmal ausgeführt haben. es ist nicht sehr idempotent :(.
Dean Hiller
9

Ich habe diesen Fehler ziemlich oft erhalten, daher entferne ich jetzt alle nicht verwendeten Container auf einmal:

docker container prune 

Hinzufügen -f, um das Entfernen ohne Aufforderung zu erzwingen.

So listen Sie alle nicht verwendeten Container auf (ohne sie zu entfernen):

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

Sehen Sie hier weitere Beispiele , wie man Prune andere Objekte (Netzwerke, Volumen, etc.).

Noam Manos
quelle
8

Für Leute, die wie ich hier von Google landen und nur Container mit mehreren Docker-Compose-Dateien mit einem gemeinsamen Dienst erstellen möchten:

Manchmal haben Sie verschiedene Projekte, die z. B. einen Datenbank-Docker-Container gemeinsam nutzen. Nur der erste Lauf sollte den DB-Docker starten, der zweite sollte erkennen, dass der DB bereits läuft, und dies überspringen. Um ein solches Verhalten zu erreichen, müssen die Docker im selben Netzwerk und im selben Projekt liegen . Auch der Name des Docker-Containers muss identisch sein.

1. Setzen Sie in Docker-Compose den gleichen Netzwerk- und Containernamen

Docker-Compose in Projekt 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 in Projekt 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:

2. Setzen Sie dasselbe Projekt mit -p param oder legen Sie beide Dateien im selben Verzeichnis ab.

docker-compose -p {projectname} up

Karl Adler
quelle