Halt ein Docker-container nach ausführen von code

Um einen tieferen Einblick in Docker erstellte ich ein dockerfile, der ausgeführt wird, ein python-Skript. Es funktioniert gut, aber nach der Ausführung des Skripts der container abstürzt. Wie kann ich ändern, meine dockerfile, um zu zerstören, den container nach Ausführung anstelle der Vermietung der container-Absturz und Neustart die ganze Zeit?

Dockerfile:

FROM python:3

ADD aa.py /

CMD [ "python", "./aa.py" ]

Python:

print('Hello!')

Fehlermeldung:

2017-06-14 11:37:09 [CELL/0] OUT Starting health monitoring of container
2017-06-14 11:37:09 [APP/PROC/WEB/0] OUT Hello!
2017-06-14 11:37:09 [APP/PROC/WEB/0] OUT Exit status 0
2017-06-14 11:37:09 [CELL/0] OUT Exit status 143
2017-06-14 11:37:09 [CELL/0] OUT Destroying container
2017-06-14 11:37:09 [API/0] OUT Process has crashed with type: "web"
2017-06-14 11:37:09 [API/0] OUT App instance exited with guid 6fdede46-6751-4725-ad78-b76262dbe701 payload: {"instance"=>"", "index"=>0, "reason"=>"CRASHED", "exit_description"=>"2 error(s) occurred:\n\n* 2 error(s) occurred:\n\n* Codependent step exited\n* cancelled\n* cancelled", "crash_count"=>4, "crash_timestamp"=>1497433029411246770, "version"=>"98e2a035-e38f-4169-95fb-2701c8486e9c"}
2017-06-14 11:37:09 [CELL/0] OUT Successfully destroyed container
2017-06-14 11:38:31 [CELL/0] OUT Creating container
  • Wie hast du begonnen, Ihre container? Sie können docker run --rm mypython wird entfernen Sie Ihre container nach ausführen des Skripts.
  • Ich verwenden das Andockfenster auf CloudFoundry. Über die Benutzeroberfläche tippte ich in einem docker-hub repo-und es begann.
  • Ich habe noch nie verwendet cloudfundry also kann dir nicht helfen mit, dass. Ich würde vermuten, dass es versucht zu starten, weil der cf, weil nur im Andockfenster diesem container ausgeführt wird, zeigen Sie die Nachricht und beenden. Die --rm option entfernen Sie den Behälter nach dem laufen. Ich kann mir nicht helfen, Sie zu reproduzieren, dies in vgl.
InformationsquelleAutor jz22 | 2017-06-14



One Reply
  1. 2

    Hinweis: die Standard –CMD für python:3 ist Python ist3.

    exit-code 143 bedeutet SIGTERM als hier erwähnt. Das ist was Andockfenster sendet.

    Sie müssen also für Ihre Python ist3 Anwendung zu verarbeiten SIGTERM-signal anmutig

    Vergessen Sie nicht, dass Ihre python-app, nach Abschluss und verlassen der main-Funktion bewirkt, dass der container automatisch anhalten und beenden.

    Die OP fügt in den Kommentaren:

    In der Zwischenzeit habe ich herausgefunden, dass der Umgang mit der SIGTERM im Andockfenster-Umgebung funktioniert es bestens.

    Jedoch mit dem gleichen code im Andockfenster auf CloudFoundry nicht verhindern, dass der container abstürzt.

    In CloudFoundry brauchen Sie ein Programm, das immer läuft und nicht nur tun, eine Aufgabe und dann stoppen, wie ein Skript funktioniert.

    Auch zu stoppen, ohne Fehler erkannt wird, wie ein Absturz in CloudFoundry.

    Ich verwandelte mein Skript in einen REST-server mit dem flask-framework. Jetzt ist es immer laufen, aber tun nur Ihre Aufgabe, beim Aufruf über die url.

    • Danke. Wenn das signal gesendet? Sobald das script ausgeführt?
    • Ich habe versucht, die Lösungen aber nach dem Umgang mit dem SIGTERM-es stürzt erneut ab.
    • das signal wird gesendet, wenn der main-Prozess beendet, und der Behälter ist zu stoppen. Wenn Ihre Anwendung nicht behandeln Sie es richtig, können Sie mit der linken, zombie-Prozesse (stackoverflow.com/a/33119321/6309). Das ist, warum, mit docker 1.13 oder mehr, haben Sie docker run --init: stackoverflow.com/a/39593409/6309
    • Wenn es dann immer noch abstürzt, wenn die docker logs, um zu sehen, ob es irgendwelche zusätzlichen Hinweise.
    • Ich werde das ausprobieren (und ich habe von Ihnen positiv bewertet werden), aber ich hoffe, dass ein python-Experte einen Blick zu 😉
    • Ich habe gerade bemerkt, dass nach der Implementierung einer SIGNIT-handler es nicht mehr, sagt exit-code 143. Jetzt heißt es stürzte mit exit-code 0 und mit Typ-web.
    • Das scheint erwartet: 143 wird das spezifische signal-code im Zusammenhang mit SIGTERM (128+15). SIGINT (unterbrochen von der Tastatur) 130 (128+2): support.ersa.edu.au/hpc/pbs-exit-codes.html
    • Aber es stürzt ab, obwohl ich Sie behandelt den sigterm-und erstellt einen neuen container hinterher.
    • Genau, das ist der Grund, warum ich Folge deiner anderen Frage, welche Adressen: stackoverflow.com/questions/44567981/…
    • haben Sie bei der Lösung Ihrer anderen Frage, die Sie gerade gelöscht haben?
    • In der Zwischenzeit habe ich herausgefunden, dass der Umgang mit den SIGTERM-in der Docker-Umgebung funktioniert es bestens. Jedoch mit dem gleichen code im Andockfenster auf CloudFoundry nicht verhindern, dass der container abstürzt. In CloudFoundry brauchen Sie ein Programm, das immer läuft und nicht nur tun, eine Aufgabe und dann stoppen, wie ein Skript funktioniert. Auch zu stoppen, ohne Fehler erkannt wird, wie ein Absturz in CloudFoundry. Ich verwandelte mein Skript in einen REST-server mit dem flask-framework. Jetzt ist es immer laufen, aber tun nur Ihre Aufgabe, beim Aufruf über die url.
    • schönen Fang! Ich habe Ihren Kommentar in der Antwort für mehr Sichtbarkeit.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.