Ich schreibe eine Dockerfile, die mehrere Befehle als Teil der CMD
-Anweisung ausführen muss, und ich dachte, der richtige Weg wäre, ein Shell-Skript mit dem Hauptdämon auszuführen, der über exec
ausgeführt wird. Leider, als Teil dieses Prozesses geht etwas von meiner Ausgabe (stdout? Stderr? Ich weiß nicht, und ich weiß nicht, wie ich herausfinden soll) verloren.Wenn ein Django-Dev-Server mit docker/fig ausgeführt wird, warum werden einige Log-Ausgaben ausgeblendet?
Hier ist das Shell-Skript:
#!/bin/sh
python manage.py migrate
exec python manage.py runserver 0.0.0.0:8000
Die Idee dahinter ist, dass der migrate
Befehl nur einmal ausgeführt wird und dessen Ausgang gezeigt, und dann wird der runserver
Befehl sollte über und der Behälter läuft bis zu diesem Prozess beendet nehmen. Das tatsächliche Problem ist, dass die Ausgabe von migrate
korrekt angezeigt wird, aber die sofortige Ausgabe von runserver
nicht angezeigt wird Seltsamerweise wird die spätere Anforderungsprotokollierung von runserver
einwandfrei angezeigt.
zu klären, hier ist der Ausgang ich erwartet habe:
[...]
No migrations to apply.
[...]
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
[21/Jan/2015 16:27:06] "GET/HTTP/1.1" 200 15829
was hier ich bin immer mit fig up
:
[...]
No migrations to apply.
[...]
[21/Jan/2015 16:27:06] "GET/HTTP/1.1" 200 15829
mir nicht einmal sicher bin, wer schuld ist dies. Ändert der runserver
Befehl seine Ausgabe abhängig davon, wie er ausgeführt wird? Ist es ein Problem mit exec
? Ist es Docker/Feige?
Als einen zusätzlichen Datenpunkt habe ich festgestellt, dass ich die gesamte Ausgabe beim Ausführen des Containers mit fig run web
, aber nicht, wenn ich tun fig up
, aber ich verstehe nicht, wie das anders oder relevant ist.
Hinweis: Entschuldigung für den Tag Spam, ich werde die Tags reduzieren, sobald ich weiß, was tatsächlich diesen Effekt verursacht.
Sie könnten Ausgabe manuell umleiten und append Weiterleitungen '>>' später verwenden. – Paul
@Paul Was meinst du? Ich verwende keine '>>' Anhängen Weiterleitungen. –
Warum läuft die Migration vor jedem Runserver? Sie können 'django-admin.py' zu einem Einstiegspunkt machen und eine Migration wie' fig run migrate' ausführen. –