当 运行 具有 docker/fig 的 Django 开发服务器时,为什么隐藏了一些日志输出?
When running a Django dev server with docker/fig, why is some of the log output hidden?
我正在编写一个 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
命令应该接管并且容器 运行s直到该进程退出。
实际问题是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
的问题吗?是docker/fig吗?
作为一个额外的数据点,我注意到当 运行 使用 fig run web
连接容器时我确实获得了所有输出,但当我 fig up
时没有,但我没有不明白这有什么不同或相关。
注意:对于标签垃圾邮件,我深表歉意,一旦我知道真正导致这种影响的原因,我将减少标签。
我今天使用 docker 作曲家发现了这个老问题。 Python 日志记录模块检查输出是一个终端,因此您需要将 tty: true
添加到服务中。示例:
version: '2'
services:
django:
tty: true
command: python -u manage.py runserver 0.0.0.0:8080
ports:
- "8080:8080"
我正在编写一个 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
命令应该接管并且容器 运行s直到该进程退出。
实际问题是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
的问题吗?是docker/fig吗?
作为一个额外的数据点,我注意到当 运行 使用 fig run web
连接容器时我确实获得了所有输出,但当我 fig up
时没有,但我没有不明白这有什么不同或相关。
注意:对于标签垃圾邮件,我深表歉意,一旦我知道真正导致这种影响的原因,我将减少标签。
我今天使用 docker 作曲家发现了这个老问题。 Python 日志记录模块检查输出是一个终端,因此您需要将 tty: true
添加到服务中。示例:
version: '2'
services:
django:
tty: true
command: python -u manage.py runserver 0.0.0.0:8080
ports:
- "8080:8080"