Ein Docker-Container kann nicht gestoppt oder neu gestartet werden


73

Beim Versuch, einen Docker-Container zu stoppen oder neu zu starten, wird die folgende Fehlermeldung angezeigt:

$ docker restart 5ba0a86f36ea
Error response from daemon: Cannot restart container 5ba0a86f36ea: [2] Container does not exist: container destroyed
Error: failed to restart containers: [5ba0a86f36ea]

Aber wenn ich renne

$ docker logs -f 5ba0a86f36ea

Ich kann die Protokolle sehen, also existiert der Container offensichtlich. Irgendwelche Ideen?

Bearbeiten:

Entschuldigung, ich habe vergessen, dies zu erwähnen:

Wenn ich renne, docker ps -asehe ich den Container als betriebsbereit. Die darin enthaltene Anwendung funktioniert jedoch nicht richtig, daher möchte ich sie neu starten oder einfach eine neue Version dieser Anwendung online herunterladen. Wenn ich den Container jedoch nicht anhalten und entfernen kann, kann ich auch keine neue Anwendung zum Laufen bringen, die denselben Port abhört.


Ich würde vermuten, dass Sie einen Container zerstören können, aber immer noch Protokolle darüber haben, wenn er zerstört wurde. Ansonsten macht Ihre Beobachtung keinen Sinn.
Ikrabbe

Möchten Sie einen neuen Container ausführen, in dem alle Daten und Änderungen gelöscht wurden, oder möchten Sie wichtige Dateien aus der von Ihnen verwendeten herausholen?
Paul

Dies kann passieren, wenn Ihr Docker-Image nicht ordnungsgemäß verarbeitet wird.
Burhan Khalid

Antworten:


36

Das sieht aus wie Docker / Docker / Issues / 12738 , gesehen mit Docker 1.6 oder 1.7:

Einige Container stoppen nicht richtig und der Neustart

Wir sehen dieses Problem häufig bei unseren Benutzerhosts, wenn sie von 1.5.0 auf 1.6.0 aktualisiert haben.
Nach dem Upgrade können einige Container nicht gestoppt (geben 500 Server Error: Internal Server Error ("Cannot stop container xxxxx: [2] Container does not exist: container destroyed") oder erzwungen (zerstört 500 Server Error: Internal Server Error ("Could not kill running container, cannot remove - [2] Container does not exist: container destroyed") werden. Die Prozesse werden noch auf dem Host ausgeführt.
Manchmal funktioniert es nach dem Neustart des Docker-Daemons.

Es gibt einige Problemumgehungen:

Ich habe alle Remote-API-Aufrufe für diesen nicht tötbaren Container ausprobiert und hier sind die Ergebnisse:

  • json, stats, changes, top, logsZurück gültige Antworten
  • stop, pause, wait, killBerichtete 404 (!)

Nachdem ich mit der Remote-API fertig war, überprüfte ich noch einmal docker ps(der Container war noch da), aber dann versuchte ich erneut, Docker zu töten, und es funktionierte! Der Container wurde getötet und ich konnte ihn entfernen.

Oder:

Was funktionierte, war ein Neustart boot2dockerauf meinem Host. Danndocker rm -f

$ boot2docker stop
$ boot2docker start
$ docker rm -f 1f061139ba04

1
Danke, ja, ein Neustart der Maschine hat geholfen. Leider ist es ein Server und sollte nicht zu oft neu gestartet werden, hoffe, dass sie den Fehler beheben. Da habe ich Docker 1.7
Peter

Ich stimme zu, dies ist wirklich eine Problemumgehung, keine vollständige Lösung. Ich werde diesen Fehlerbericht überwachen.
VonC

1
Ich hatte einen ungesunden Container, den ich nicht stoppen oder töten konnte: Docker Stop -f # half, danke!
Sergpank

100

Ich konnte boot2dockermeine Maschine nicht finden . Also habe ich mir etwas ausgedacht, das für mich funktioniert hat.

$ sudo systemctl restart docker.socket docker.service
$ docker rm -f <container id>

Überprüfen Sie, ob es Ihnen auch hilft.


1
Ich musste die Force-Option verwenden docker rm -f <container id>, aber es funktioniert. Vielen Dank.
Chaseisabelle

Danke für das Feedback @chaseisabelle. Es macht Sinn. Ich werde es in die Antwort aufnehmen.
Abhishek Kashyap

34

Alle Docker: start | restart | stop | rm --force | kill-Befehle funktionieren möglicherweise nicht, wenn der Container nicht funktioniert. Sie können den Docker-Daemon jederzeit neu starten. Wenn jedoch andere Container ausgeführt werden, ist dies möglicherweise nicht die Option. Was Sie tun können, ist:

ps aux | grep <<container id>> | awk '{print $1 $2}'

Die Ausgabe enthält:

<<user>><<process id>>

Beenden Sie dann den mit dem Container verbundenen Prozess wie folgt:

sudo kill -9 <<process id from above command>>

Dadurch wird der Container zerstört und Sie können einen neuen Container mit dem richtigen Bild starten.


Das Ergebnis ist für mich kill: illegal process id: [USER][PROCESS_ID] . Kennen Sie Alternativen?
Flarkmarup

1
Ich bekomme No such process
aletede91

12

Wissenswert:

Wenn Sie ein ENTRYPOINT-Skript ausführen, funktioniert das Skript mit dem Shebang

#!/bin/bash -x

Hält aber den Container davon ab, mit anzuhalten

#!/bin/bash -xe

Was wäre der Grund dafür? Ich kann keine Referenz dafür finden
bigbear3001

6

Überprüfen Sie mit dem Befehl "top", ob es einen Zombie-Prozess gibt.

docker ps | grep <<container name>> 

Holen Sie sich die Container-ID.

ps -ef | grep <<container id>>

ps -ef|grep defunct | grep java

Und töte den Container mit der übergeordneten PID.



3

Ich hatte das gleiche Problem auf einem Windows-Hostcomputer und keine der anderen Optionen hier funktionierte für mich. Am Ende musste ich nur den physischen Containerordner löschen, der sich hier befand:

C:\ProgramData\Docker\containers\[container guid]

Ich hatte den Docker-Dienst zuerst gestoppt, um sicher zu gehen, und als ich ihn neu startete, waren die kaputten Container jetzt verschwunden und ich konnte neue erstellen. Ich vermute, dass das gleiche auf einem Linux-Host-Computer funktioniert, aber ich weiß nicht, wo sich die Container-Ordner auf diesem Betriebssystem befinden.


0

Wenn Sie unter Ubuntu arbeiten, stellen Sie sicher, dass Docker-Compose nicht als Snap installiert ist. Dies führt zu allen möglichen zufälligen Problemen, einschließlich der oben genannten.

Entfernen Sie den Druckknopf:

sudo snap remove docker-compose

Und manuell aus dem Compose-Repository installieren:

Installationsanleitung für Docker Compose


0

In meinem Fall konnte ich keinen Container löschen, der mit Nomadenjobs erstellt wurde. Es gibt keine Ausgabe für die docker logs <ContainerID> und im Allgemeinen sieht es wie eingefroren aus.

Bis jetzt lautet die Lösung: sudo service docker restartKann jemand eine bessere vorschlagen?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.