Docker-Lauf -> 'Name wird bereits vom Container verwendet'

387

Das Ausführen der dockerRegistrierung mit dem folgenden Befehl löst immer einen Fehler aus:

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.

Wie kann dieser Fehler verhindert werden?

Rubytastic
quelle

Antworten:

427

Das hat mich auch verwirrt. Hier sind zwei Befehle relevant:

Docker ausführen Führen Sie einen Befehl in einem neuen Container aus

Docker-Start Starten Sie einen oder mehrere gestoppte Container

Walt Howard
quelle
8
Dies ist die Antwort, nach der ich gesucht habe, um einen Docker-Container erneut auszuführen. Vielen Dank!
Isapir
105
Daher ist es docker ps -ain diesem Fall auch wichtig, alle Container zu sehen.
Sławosz
9
Ja, docker start -a container-nameist der Befehl, mit dem Sie einen Container starten können, mit dem erstellt wurde docker run. Beachten Sie die -aFlagge, für die die Abkürzung steht --attach. Auf diese Weise wird der Container im Vordergrund gestartet, genau wie bei der Verwendung docker run(die standardmäßig einen Container im Vordergrund ausführt).
Krzysztof Wołowski
1
@Suncatcher Ja.
0x7d7b
1
@ eMPee584 Nein, da docker create ein Container erstellt , aber nicht ausgeführt wird.
0x7d7b
182

Das heißt, Sie haben bereits in der Vergangenheit einen Container mit dem Parameter gestartet docker run --name registry-v1 ... .

Sie müssen dies zuerst löschen, bevor Sie einen gleichnamigen Container mit neu erstellen können docker rm registry-v1. Wenn dieser Container noch läuft, müssen Sie ihn zuerst stoppen, bevor Sie ihn mit löschen könnendocker stop registry-v1 . Oder wählen Sie einfach einen anderen Namen für den neuen Container.

Um eine Liste der vorhandenen Container und ihrer Namen zu erhalten, rufen Sie einfach auf docker ps -a.

0x7d7b
quelle
4
Aber warum sind diejenigen, für die gestoppt werden? Oder was ist gut, wenn sie noch da sind, wenn sie gestoppt werden?
mskw
2
So können Sie sie später ausführen, ohne sie neu zu
erstellen
2
Sie sagen also im Grunde "damit Sie das Image einmal ausführen können (dh den Container erstellen und dann den Befehl darin ausführen) und dann den Container so oft starten, wie Sie möchten". Aber warum sollten wir etwas nur einmal ausführen müssen? Ohne die möglichen Änderungen beizubehalten, die "etwas" am Container vorgenommen hat (denken Sie daran, dass Änderungen des Docker-Container-Status verloren gehen, sofern sie nicht festgeschrieben werden).
Maksim Gumerov
14
Wenn Sie den Namen Ihres Containers kennen, können Sie ihn mit dieser Verknüpfung entfernendocker rm $(docker ps -aq --filter name=myContainerName)
Jujhar Singh
2
@JujharSingh Warum nicht nur docker rm myContainerName?
Rodrigo
152

Hier, was ich getan habe, funktioniert es gut.

Schritt 1: (Docker-Container mit seinem Namen aufgelistet)

docker ps -a

Schritt 2:

docker rm name_of_the_docker_container
Thavaprakash Swaminathan
quelle
4
Dies war hilfreich für mich, der "Docker ps" muss intuitiv -ein Flag, um etwas zurückzugeben.
MichaelChan
docker ps gibt nur laufende Container zurück und benötigt -a, um auch die gestoppten aufzulisten.
Surendra Pratap
57

Nur um zu erklären, was andere sagen (ich habe einige Zeit gebraucht, um zu verstehen), heißt das einfach: Wenn Sie diesen Fehler sehen, bedeutet dies, dass Sie bereits einen Container haben und ihn ausführen müssen. Während es intuitiv ausgeführt docker runwerden soll, tut es dies nicht. Mit dem Befehl docker runwird nur ein Container zum ersten Mal gestartet . Um einen vorhandenen Container auszuführen, benötigen Sie Folgendes docker start $container-name. Soviel dazu, Entwickler zu bitten, sinnvolle / intuitive Befehle zu erstellen.

Mithunpaul
quelle
32

Sie haben 2 Möglichkeiten, um dies zu beheben ...

  1. Entfernen Sie den vorherigen Container unter diesem Namen mit dem Befehl docker rm $(docker ps -aq --filter name=myContainerName)

    ODER

  2. Benennen Sie den aktuellen Container in einen anderen Namen um, dh ändern Sie diesen Teil --name registry-v1in einen ähnlichen Namen --name myAnotherContainerName

Sie erhalten diesen Fehler, weil dieser Containername (dh registry-v1) in der Vergangenheit von einem anderen Container verwendet wurde ... obwohl dieser Container möglicherweise beendet wurde (dh derzeit nicht verwendet wird).

Edwin Ikechukwu Okonkwo
quelle
30

Wenn Sie ein neues Image erstellen, möchten Sie häufig jedes Mal einen neuen Container mit demselben Namen ausführen. Ich fand, der einfachste Weg war, den Container mit der Option --rm zu starten :

--rm        Automatically remove the container when it exits

z.B

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

Leider wird es in den Beispielen aus den Dokumenten fast zufällig verwendet

Martin
quelle
Bild oder Container?
Pim Heijden
1
Container werden aus erstellten Images ausgeführt. Ähnlich wie Klassendefinition (Bild) und Klasseninstanz (Container).
Martin
Zuerst sagst du Container, dann Bild. Das ist unklar. Wenn ein Container für dieses Image bereits ausgeführt wird, wird er nach der Verwendung weiterhin ausgeführt --rm. Es wird nicht neu gestartet.
Pim Heijden
4
Nur ein Hinweis: Funktioniert --rmnur, wenn Sie den Container mit --rmflag erstellt haben. Das heißt, wenn Sie den Container ohne --rmFlag erstellt haben, müssen Sie ihn manuell entfernen, bevor Sie den Vorteil des rmFlags nutzen können.
Lepe
18

Ursache

Ein gleichnamiger Container ist noch vorhanden.

Lösung

Um denselben Containernamen wiederzuverwenden, löschen Sie den vorhandenen Container wie folgt:

docker rm <container name>

Erläuterung

Container können in folgenden Zuständen vorhanden sein, in denen der Containername nicht für einen anderen Container verwendet werden kann:

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

Sie können Container im runningStatus anzeigen, indem Sie Folgendes verwenden:

docker ps

Verwenden Sie: Um Container in allen Status anzuzeigen und herauszufinden, ob ein Containername verwendet wird:

docker ps -a
Roderick Jonsson
quelle
Wenn man den Container wiederverwenden möchte, ist --rm nicht der geeignete Schalter. Ein einfacher "Docker-Start {Containername}" ist ausreichend.
Ken Ingram
11

Hier ist, wie ich dies auf Ubuntu 18 gelöst habe:

  1. $ sudo docker ps -a
  2. Kopieren Sie die Container-ID

Für jeden Container tun Sie:

  1. $ sudo docker stop container_ID
  2. $ sudo docker rm container_ID
Ali Faghihinia
quelle
10

Sie können es mit dem Befehl entfernen sudo docker rm YOUR_CONTAINER_IDund dann einen neuen Container mit ausführen sudo docker run .... oder starten Sie einen vorhandenen Container mit neusudo docker start YOUR_CONTAINER_ID

Donglei
quelle
7

Ich habe das Problem durch die folgenden Schritte gelöst und hoffe, dass es hilft.

  1. Geben Sie ein, docker ps -aum alle Container in Ihrem System aufzulisten.
  2. Überprüfen Sie den NAMES-Teil, in dem Sie Ihren Docker-Container initialisiert haben.
  3. Geben Sie dann ein docker rm --force name_of_container
  4. Installieren Sie den Docker-Container wie gewünscht.

Ich hatte Probleme mit NIFI und habe Docker entfernt und neu installiert. Viel Glück.

Nijat Mursali
quelle
4

Ich lerne gerade Docker und das hat mich auch erwischt. Ich habe den Container mit diesem Namen bereits gestoppt und dachte daher, ich könnte einen neuen Container mit diesem Namen ausführen.

Nicht der Fall. Nur weil der Container gestoppt ist, heißt das nicht, dass er nicht erneut gestartet werden kann und alle Parameter beibehalten werden, mit denen er erstellt wurde (einschließlich des Namens).

als ich rannte docker ps -a , sah ich alle Dummy-Testcontainer, die ich beim Herumspielen erstellt hatte.

Kein Problem, da ich diese nicht mehr will, habe ich gerade getan, docker rm containernamezu welchem ​​Zeitpunkt mein neuer Container mit dem alten Namen ausgeführt werden durfte.

Ah, und jetzt, wo ich mit dem Schreiben dieser Antwort fertig bin, sehe ich Slawosz 'Kommentar zu Walt Howards Antwort oben, der die Verwendung von vorschlägt docker ps -a

C. Tewalt
quelle