2016-06-30 7 views
27

Ich habe einen Docker Container in einem Host von 1G RAM ausgeführt (es gibt auch andere Container auf dem gleichen Host). Die Anwendung in diesem Andock-Container wird einige Bilder decodieren, die viel Speicher belegen können.Wie kann man den Grund erkennen, warum ein Andock-Container beendet wird?

Von Zeit zu Zeit wird dieser Container beendet. Ich bezweifle, dass es wegen nicht genügend Speicher, aber nicht sehr sicher ist. Ich brauche eine Methode, um die Ursache zu finden. Gibt es also überhaupt etwas zu wissen, was für den Tod dieses Containers passiert ist?

+1

Sie können die Protokolle für diesen Container über 'docker logs ' überprüfen. – techtabu

+0

aber der Container ist beendet, ich denke, ich kann es nicht mehr loggen? –

+0

Ich habe es gerade an meiner Maschine versucht. Sie können weiterhin auf die Protokolle zugreifen, auch wenn der Container beendet wurde. –

Antwort

46

Andere haben docker logs $container_id erwähnt, um die Ausgabe der Anwendung anzuzeigen. Das wäre immer meine erste Sache zu überprüfen.

Als Nächstes können Sie eine docker inspect $container_id laufen Details über den Zustand anzuzeigen, zB:

"State": { 
     "Status": "exited", 
     "Running": false, 
     "Paused": false, 
     "Restarting": false, 
     "OOMKilled": false, 
     "Dead": false, 
     "Pid": 0, 
     "ExitCode": 2, 
     "Error": "", 
     "StartedAt": "2016-06-28T21:26:53.477229071Z", 
     "FinishedAt": "2016-06-28T21:26:53.478066987Z" 
    }, 

Die wichtige Zeile ist „OOMKilled“, das wahr ist, wenn Sie die Containerspeichergrenzen überschreiten und Docker tötet Ihre App Möglicherweise möchten Sie auch den Beendigungscode nachsehen, um festzustellen, ob eine Ursache für den Abbruch durch Ihre App gefunden wurde.

+1

Ich verstehe nicht, hier ist, seit mein Container ist weg, wie die "inspect" funktioniert? Wenn die App stirbt, stirbt der Container aus der obigen Diskussion. Sie meinen, das gleiche Bild neu zu starten und dann zu inspizieren? –

+2

@LiBin Ein Container wird nicht abgewischt, wenn er stirbt, er wird einfach angehalten wie Status = gestoppt oder beendet. 'docker ps -a' und sehen Sie selbst –

+0

@ SamuelToh danke. es ist jetzt klar. –