Docker - Toter Container kann nicht entfernt werden


80

Ich kann den toten Container nicht entfernen. Er wird erneut angezeigt, nachdem ich den Docker-Dienst neu gestartet habe.

docker ps -a
CONTAINER ID         STATUS          
11667ef16239         Dead

Dann

docker rm -f 11667ef16239

Als ich dann den Docker ps -a ausführte, wurden keine Docker-Container angezeigt.

docker ps -a
CONTAINER ID         STATUS

Wenn ich jedoch den Docker-Dienst neu starte:

service docker restart

Führen Sie den Docker ps -a erneut aus:

docker ps -a
CONTAINER ID         STATUS          
11667ef16239         Dead

3
Hallo, dies ist immer noch ein aktuelles Problem, aber die derzeit akzeptierte Antwort ist nicht mehr gültig und ziemlich riskant. Es gibt die Umount-Antwort, die gut ist, also wäre es fair, wenn Sie diese nach Möglichkeit akzeptieren
Daniel F

Die umountAntwort ist nicht mehr realisierbar, da das Aufheben der Bereitstellung nicht möglich ist, wenn die Ressource ausgelastet ist. Und in ähnlicher Weise funktioniert es auch nicht, die verantwortliche PID zu töten.
Nutle

Antworten:


48

Höchstwahrscheinlich ist ein Fehler aufgetreten, als der Dämon versucht hat, den Container zu bereinigen, und er steckt jetzt in diesem "Zombie" -Zustand fest.

Ich fürchte, Ihre einzige Möglichkeit besteht darin, es manuell zu bereinigen:

$ sudo rm -rf /var/lib/docker/<storage_driver>/11667ef16239.../

Wo <storage_driver>ist der Name des Fahrers ( aufs, overlay, btrfs, oder devicemapper).


ist das funktionale Äquivalent zu dieser Aktion möglich, indem ein Docker-Befehl ausgegeben wird, anstatt auf sudo rm zurückzugreifen ... für diejenigen wie mich, die keine sudo-Kräfte auf unserer Produktbox haben
Scott Stensland

45

Tatsächlich haben sich die Dinge heutzutage leicht geändert, um diese toten Container loszuwerden. Sie können versuchen, die Bereitstellung dieser blockierten Dateisysteme aufzuheben, um sie freizugeben

Also, wenn Sie eine Nachricht wie diese erhalten

Error response from daemon: Cannot destroy container elated_wozniak: Driver devicemapper failed to remove root filesystem 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3: Device is Busy

Führen Sie dies einfach aus

umount /var/lib/docker/devicemapper/mnt/656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3

und danach können Sie normalerweise den Behälter entfernen


Dieser fühlt sich wie der beste und sicherste an!
Daniel F

Ich habe gerade das System neu gestartet und wen ich mich wieder angemeldet habe .. die Container waren weg.
Superheld

Dies funktionierte für mich, obwohl ich den Docker-Dienst neu starten musste, damit die Ausgabe von docker ps -atatsächlich leer war.
Daniel Quinn

1
Zwei Jahre später und dieser Beitrag ist immer noch relevant. Ich habe gerade zwei Stunden lang versucht, eine Lösung zu finden, und bin dann auf Folgendes gestoßen : github.com/moby/moby/issues/3786#issuecomment-33471966 . Um alle Devicemapper-Container zu entfernen, verwenden Sieumount $(grep 'devicemapper' /proc/mounts | awk '{print$2}' | sort -r)
Alexander F.

42

deadMit diesem Befehl können Sie auch Container entfernen

docker rm $(docker ps --all -q -f status=dead)

Aber ich bin mir wirklich nicht sicher, warum und wie die deadContainer erstellt werden. Dieser Fehler scheint mit https://github.com/typesafehub/mesos-spark-integration-tests/issues/34 in Zusammenhang zu stehen, wenn ich deadContainer erhalte

[Update] Mit dem Docker 1.13-Update können wir problemlos beide unerwünschten Container entfernen und Bilder baumeln lassen

$ docker system df #will show used space, similar to the unix tool df
$ docker system prune # will remove all unused data.

@Akvel Es funktioniert ohne sie. Es ist bereits tot, also keine abhängigen Prozesse.
sk8terboi87

4
docker system prunetat mehr als erwartet, löste aber das Problem. Wie im OP angegeben, docker rm --forcefunktioniert nicht.
Rdupz

1
Wie von @rdupz angedeutet, docker system prune ist es gefährlich , lesen Sie diesen Kommentar darüber, wie selbst benannte Volumes entfernt werden, wenn mit -a. Außerdem werden Netzwerke entfernt, was normalerweise nicht das ist, was Sie wollen. Besser zu verwenden docker image pruneund docker volume prunein 1.13+.
RichVel

Dieser Befehl gibt einen Syntaxfehler aus. Ich denke, Sie haben den Force- -fParameter verlegt
VPaul

28

Beim Entfernen eines toten Containers (Docker 17.06.1-ce unter CentOS 7) trat der folgende Fehler auf:

Error response from daemon: driver "overlay" failed to remove root filesystem for <some-id>: 
remove /var/lib/docker/overlay/<some-id>/merged: device or resource busy

So habe ich es behoben:

1. Überprüfen Sie, welche anderen Prozesse ebenfalls Docker-Ressourcen verwenden

$ grep docker /proc/*/mountinfo

was so etwas ausgibt, wobei die Zahl danach die /proc/ist pid:

/proc/10001/mountinfo:179...
/proc/10002/mountinfo:149...
/proc/12345/mountinfo:159 149 0:36 / /var/lib/docker/overlay/...

2. Überprüfen Sie den Prozessnamen der obigen PID

$ ps -p 10001 -o comm=
dockerd
$ ps -p 10002 -o comm=
docker-containe
$ ps -p 12345 -o comm=
nginx   <<<-- This is suspicious!!!

Also, nginxmit pid scheint 12345 auch zu verwenden /var/lib/docker/overlay/..., weshalb wir den zugehörigen Container nicht entfernen und den device or resource busyFehler bekommen können. ( Hier finden Sie eine Diskussion darüber, wie nginxderselbe Mount-Namespace mit Docker-Containern geteilt wird, um dessen Löschung zu verhindern.)

3. Stoppen Sie nginxund dann kann ich den Container erfolgreich entfernen.

$ sudo service nginx stop
$ docker rm <container-id>

1
Danke Herr für die nginx Info, ich hatte das gleiche Problem, es sauer mich so viele Male, ich hatte auch das gleiche Problem mit dem DNS - Verfahren (benannt), musste: systemctl Neustart genannt
user1928596

13

Ich habe das gleiche Problem und beide Antworten haben nicht geholfen.

Was mir geholfen hat, ist nur die fehlenden Verzeichnisse zu erstellen und sie zu entfernen:

mkdir /var/lib/docker/devicemapper/mnt/656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3
mkdir /var/lib/docker/devicemapper/mnt/656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3-init
docker rm 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3

11

Das gewaltsame Entfernen des Behälters hat bei mir funktioniert.

docker rm -f <id_of_the_dead_container>

Anmerkungen :

Beachten Sie, dass dieser Befehl diesen Fehler auslösen kann Error response from daemon: Driver devicemapper failed to remove root filesystem <id_of_the_dead_container>: Device is Busy

Trotz dieser Meldung sollte die Halterung des Gerätezuordners für tote Container entfernt werden. Das heißt, Sie werden nicht mehr auf diesen Pfad zugreifen:

/var/lib/docker/devicemapper/mnt/<id_of_the_dead_container>


8

Versuchte alle oben genannten (kurz vor Neustart / Neustart Docker).

Also hier ist der Fehler om docker rm:

$ docker rm 08d51aad0e74
Error response from daemon: driver "devicemapper" failed to remove root filesystem for 08d51aad0e74060f54bba36268386fe991eff74570e7ee29b7c4d74047d809aa: remove /var/lib/docker/devicemapper/mnt/670cdbd30a3627ae4801044d32a423284b540c5057002dd010186c69b6cc7eea: device or resource busy

Dann habe ich folgendes gemacht:

$  grep docker /proc/*/mountinfo | grep 958722d105f8586978361409c9d70aff17c0af3a1970cb3c2fb7908fe5a310ac
/proc/20416/mountinfo:629 574 253:15 / /var/lib/docker/devicemapper/mnt/958722d105f8586978361409c9d70aff17c0af3a1970cb3c2fb7908fe5a310ac rw,relatime shared:288 - xfs /dev/mapper/docker-253:5-786536-958722d105f8586978361409c9d70aff17c0af3a1970cb3c2fb7908fe5a310ac rw,nouuid,attr2,inode64,logbsize=64k,sunit=128,swidth=128,noquota

Dies ist die PID des fehlerhaften Prozesses, der ihn beschäftigt hält - 20416 (der Punkt nach / proc /

Also habe ich ein ps -p gemacht und zu meiner Überraschung gefunden:

[devops@dp01app5030 SeGrid]$ ps -p 20416
  PID TTY          TIME CMD
20416 ?        00:00:19 ntpd

Ein wahrer WTF-Moment. Also habe ich ein mit Google gelöstes Problem gepaart und folgendes gefunden: Dann habe ich dieses https://github.com/docker/for-linux/issues/124 gefunden

Es stellte sich heraus, dass ich den ntp-Daemon neu starten musste und das Problem wurde behoben !!!


Du hast meinen Tag gerettet. Ich hatte Probleme. Selbst nach dem Neustart des Docker-Daemons wurde das Problem nicht gelöst. Ich glaube, diese Antwort sollte akzeptiert werden. Vielen Dank.
saß

6

Versuchen Sie, die folgenden Befehle auszuführen. Es funktioniert immer bei mir.

# docker volume rm $(docker volume ls -qf dangling=true)
# docker rm $(docker ps -q -f 'status=exited')

Starten Sie Docker nach Ausführung der obigen Befehle neu,

# service docker restart

6
grep 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3 /proc/*/mountinfo

dann finde die PID von 656cfd09aee399c8ae8c8d3e735fe48d70be6672773616e15579c8de18e2a3b3andund töte sie


wo die Zahl danach /proc/ist die pid
Belter

6

Ich habe die obigen Vorschläge ausprobiert, aber nicht funktioniert.

Dann

  1. Ich versuche : docker system prune -a , es hat beim ersten Mal nicht funktioniert
  2. Ich starte das System neu
  3. Ich versuche es noch mal docker system prune -a . Diesmal funktioniert es. Es wird eine Warnmeldung gesendet und am Ende gefragt: "Sind Sie sicher, dass Sie fortfahren möchten? J / n? Ans: y. Es wird eine Zeit lang und am Ende sind die toten Container verschwunden.
  4. Überprüfen Sie mit docker ps -a

WICHTIG - Dies ist die nukleare Option, da alle Container + Bilder zerstört werden


Das hat bei mir funktioniert. Vielen Dank! Ich musste auch einen Systemneustart durchführen.
PandasCat

2

Versuchen Sie dies, es hat bei mir funktioniert:

docker rm -f <container_name>

eg. docker rm -f 11667ef16239

2

für Windows:

del D:\ProgramData\docker\containers\{CONTAINER ID}
del D:\ProgramData\docker\windowsfilter\{CONTAINER ID}

Starten Sie dann den Docker Desktop neu


1

Versuchen Sie es zu töten und entfernen Sie dann> :) dh
docker kill $(docker ps -q)


1

Hier gibt es viele Antworten, aber keine davon betraf die (schnelle) Lösung, die für mich funktioniert hat.

Ich verwende Docker Version 1.12.3, Build 6b644ec.

Ich rannte einfach docker rmi <image-name>nach dem Bild, von wo der tote Container kam. EINdocker ps -a zeigte dann, dass der tote Container vollständig fehlte.

Dann habe ich natürlich das Bild erneut gezogen und den Container erneut ausgeführt.

Ich habe keine Ahnung, wie es sich in diesem Zustand befand, aber so ist es ...


1

Versuchen Sie, es hat bei mir funktioniert:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4f13b53be9dd        5b0bbf1173ea        "/opt/app/netjet..."   5 months ago        Dead                                    appname_chess

$ docker rm $(docker ps --all -q -f status=dead)
Error response from daemon: driver "devicemapper" failed to remove root filesystem for 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440: failed to remove device 487b4b73c58d19ef79201cf6d5fcd6b7316e612e99c14505a6bf24399cad9795-init: devicemapper: Error running DeleteDevice dm_task_run failed

su
cd /var/lib/docker/containers
[root@localhost containers]#  ls -l
total 0
drwx------. 1 root root 312 Nov 17 08:58 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440
[root@localhost containers]# rm -rf 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440
systemctl restart docker

1
  1. Zum Löschen aller toten Container docker rm -f $(docker ps --all -q -f status=dead)

  2. Zum Löschen aller verlassenen Container docker rm -f $(docker ps --all -q -f status=exited)

Wie ich habe -fist notwendig


Fehler: Kein solcher Container: 2787a08aaf3c Funktioniert nicht, es zeigt: Fehler: Kein solcher Container: 2f13ced716af Fehler: Kein solcher Container: 48d43ea0e93f Fehler: Kein solcher Container: ab7720dd4392 Fehler: Kein solcher Container: c81751444fad
juliangonzalez

0

Unter Centos7 & Docker 1.8.2 konnte ich die Lösung von Zgr3doo nicht verwenden, um per Devicemapper zu mounten (ich glaube, die Antwort war, dass das Volume nicht gemountet / gefunden wurde.)

Ich glaube, ich hatte auch ein ähnliches Problem mit der Antwort von sk8terboi87: Ich glaube, die Meldung lautete, dass die Volumes nicht abgemeldet werden konnten, und listete die spezifischen Volumes auf, die versucht wurden, die Bereitstellung aufzuheben, um die toten Container zu löschen.

Was für mich funktioniert hat, war, Docker zuerst zu stoppen und dann die Verzeichnisse manuell zu löschen. Ich konnte anhand der Fehlerausgabe des vorherigen Befehls feststellen, um welche es sich handelt, um alle toten Container zu löschen.

Entschuldigung für die vagen Beschreibungen oben. Ich fand diese SO-Frage Tage nachdem ich die toten Container gehandhabt hatte. .. Allerdings habe ich heute ein ähnliches Muster bemerkt:

$ sudo docker stop fervent_fermi; sudo docker rm fervent_fermi fervent_fermi
Error response from daemon: Cannot destroy container fervent_fermi: Driver devicemapper failed to remove root filesystem a11bae452da3dd776354aae311da5be5ff70ac9ebf33d33b66a24c62c3ec7f35: Device is Busy
Error: failed to remove containers: [fervent_fermi]

$ sudo systemctl docker stop
$ sudo rm -rf /var/lib/docker/devicemapper/mnt/a11bae452da3dd776354aae311da5be5ff70ac9ebf33d33b66a24c62c3ec7f35
$

Bei diesem Ansatz ist mir aufgefallen, dass Docker die Bilder mit unterschiedlichen Namen neu erstellt hat:

a11bae452da3     trend_av_docker   "bash"   2 weeks ago    Dead    compassionate_ardinghelli

Dies kann daran liegen, dass der Container immer mit restart = ausgegeben wurde. Die Container-ID stimmt jedoch mit der ID des Containers überein, der zuvor das Volume verwendet hat, das ich zwangsweise gelöscht habe. Es gab keine Schwierigkeiten, diesen neuen Container zu löschen:

$ sudo docker rm -v compassionate_ardinghelli
compassionate_ardinghelli

1
Alternative 2: Überarbeiten Sie dies in eine eigene, eigenständige Antwort. Es ist in Ordnung, dabei auf andere Antworten zu verweisen - aber geben Sie genau an, um welche Antwort es sich handelt, z. B. nach dem Namen des Autors. Wenn Sie mit "Ich kann noch keinen Kommentar abgeben ..." beginnen, wird Ihr Beitrag garantiert gelöscht. Wenn Sie etwas Hilfreiches als Antwort hinzufügen möchten, tun Sie es einfach! (Und raus da und noch 9 Wiederholungen!) Viel Glück.
Mogsdad

0

Versuchen Sie dies, es hat bei Centos funktioniert. 1) Docker-Container ls -a gibt Ihnen eine Liste der Container-Überprüfungsstatus, die Sie Geben Sie hier die Bildbeschreibung ein entfernen möchten. 2) Docker-Container rm -f 97af2da41b2b ist kein großes Fan-Force-Flag, erledigt aber die zu überprüfende Arbeit Es hat funktioniert, einfach den Befehl erneut auslösen oder auflisten. Geben Sie hier die Bildbeschreibung ein 3) Fahren Sie fort, bis wir alle toten Container geräumt haben Geben Sie hier die Bildbeschreibung ein


0

Der beste Weg, um tote Containerprozesse loszuwerden, besteht darin, Ihren Docker-Dienst neu zu starten. Ich konnte einen Container nicht entfernen, da er im Neustartstatus stecken blieb. Ich habe gerade den Docker-Dienst neu gestartet und es hat bei mir funktioniert.


0

In meinem Fall musste ich es mit entfernen

rm -r /var/lib/docker/containers/<container-id>/

und es hat funktioniert. Vielleicht lösen Sie es so in Docker-Version ~ 19. Meine Docker-Version war 19.03.12,

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.