Поведение по умолчанию в Unix -подобных средах заключается в том, что процесс наследует stdout своего родителя (и stdin и stderr). Вы можете легко продемонстрировать это в своей локальной оболочке:
#!/bin/sh
# This is script1
./script2
#!/bin/sh
# This is script2
echo hi there
$ ./script1
hi there
$ ./script1 > log
$ cat log
hi there
В последнем примере, если вывод script1
поступает на консоль или перенаправляется в файл журнала, когда он запускает script2
как подпроцесс, он наследует тот же стандартный вывод.
Причина gunicorn
не в pid 1 в том, что у вас есть оболочка оболочки. Вы можете использовать встроенную оболочку exe c, чтобы заменить процесс оболочки тем, что он хочет запустить
#!/bin/sh
exec /usr/local/bin/gunicorn myapp:app -c /local/gunicorn.conf.py
Если вам не нужно больше настраивать, это может быть Проще поместить команду прямо в Dockerfile. (CMD
легче переопределить во время выполнения для выполнения таких операций, как получение отладочных оболочек, если вам нужно; это заменяет существующую строку ENTRYPOINT
.)
CMD ["gunicorn", "myapp:app", "-c", "/local/gunicorn.conf.py"]