当使用docker / fig运行Django dev服务器时,为什么一些日志输出被隐藏了?

我正在写一个Dockerfile,它需要运行多个命令作为CMD指令的一部分,我认为正确的方法是运行一个shell脚本,通过exec执行主守护进程。 不幸的是,作为这个过程的一部分,我的一些输出(stdout?stderr?我不知道,我也不知道如何发现)会丢失。

这是shell脚本:

 #!/bin/sh python manage.py migrate exec python manage.py runserver 0.0.0.0:8000 

这个想法是, migrate命令只运行一次,其输出显示,然后runserver命令应该接pipe,容器运行,直到该进程退出。

实际的问题是migrate的输出显示正确,但runserver的直接输出不显示。 奇怪的是,以后的runserver请求logging显示得很好。

为了澄清,这是我期望的输出:

 [...] 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 

这是我得到的东西:

 [...] No migrations to apply. [...] [21/Jan/2015 16:27:06] "GET / HTTP/1.1" 200 15829 

我甚至不知道这是谁的错。 runserver命令是否根据运行方式更改其输出? 这是exec的问题吗? 这是docker/无花果吗?

作为一个额外的数据点,我注意到,当我用fig run web运行容器时,我确实得到了所有的输出结果,但是当我完成这个工作时却没有得到所有的输出结果,但是我不明白这是不同的还是相关的。

注意:对于标签垃圾邮件抱歉,一旦我知道实际上导致这种效果的标签,我会减less标签。

我今天发现这个老问题使用dockercomposer php。 Python日志logging模块检查输出是一个terminal,所以你需要添加tty: true到服务。 例:

 version: '2' services: django: tty: true command: python -u manage.py runserver 0.0.0.0:8080 ports: - "8080:8080"