Я пишу файл Docker, который должен запускать несколько команд как часть инструкции CMD
, и я подумал, что правильным способом сделать это будет запуск сценария оболочки с помощью главного демона, выполняемого через exec
. К сожалению, как часть этого процесса часть моего вывода (stdout? Stderr? Я не знаю, и я не знаю, как узнать) теряется.При запуске сервера Django dev с docker/fig, почему некоторые из выходных данных журнала скрыты?
Вот сценарий оболочки:
#!/bin/sh
python manage.py migrate
exec python manage.py runserver 0.0.0.0:8000
Идея заключается в том, что команда migrate
просто запустить один раз и показали его выход, а затем команда runserver
должна взять на себя и контейнер не работает до тех пор, что процесс не завершит работу.
Фактическая проблема заключается в том, что вывод migrate
отображается правильно, но немедленный вывод runserver
не показан. Как ни странно, более поздний запрос журнала runserver
показан просто отлично.
Чтобы уточнить, вот выход я ожидал:
[...]
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
Вот что я получаю с fig up
:
[...]
No migrations to apply.
[...]
[21/Jan/2015 16:27:06] "GET/HTTP/1.1" 200 15829
Я даже не уверен, кто виноват это. Изменяет ли команда runserver
свой выход в зависимости от того, как он запускается? Это проблема с exec
? Это докер/рис?
Как одна дополнительная точка данных, я заметил, что я получаю весь вывод при запуске контейнера с fig run web
, но не тогда, когда я делаю fig up
, но я не понимаю, как это отличается или релевантно.
Примечание: извините за спам тега, я уменьшу теги, как только узнаю, что на самом деле вызывает этот эффект.
Вы можете перенаправить вывод вручную и позже использовать переадресацию «>>» позже. – Paul
@Paul Что значит? Я не использую никаких переадресаций '>>' append. –
Зачем запускать миграцию перед каждым сервером? Вы можете сделать 'django-admin.py' точкой входа и запустить миграцию, например' fig run migrate'. –