Hen*_*ger 7 django shell exec docker fig
我正在编写一个Dockerfile,它需要运行多个命令作为CMD指令的一部分,我认为正确的方法是运行一个带有主守护进程的shell脚本exec.不幸的是,作为该过程的一部分,我的一些输出(stdout?stderr?我不知道,我不知道如何找出)迷失了.
这是shell脚本:
#!/bin/sh
python manage.py migrate
exec python manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)
这个想法是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
Run Code Online (Sandbox Code Playgroud)
这是我得到的fig up:
[...]
No migrations to apply.
[...]
[21/Jan/2015 16:27:06] "GET / HTTP/1.1" 200 15829
Run Code Online (Sandbox Code Playgroud)
我甚至都不确定这是谁的错.runserver命令是否根据其运行方式更改其输出?这有问题exec吗?是docker/fig?
作为一个额外的数据点,我注意到在运行容器时我确实获得了所有输出fig run web,但不是在我这样做时fig up,但我不明白它是如何不同或相关的.
注意:抱歉标签垃圾邮件,一旦我知道实际导致此效果的原因,我会减少标签.
ern*_*ejo 13
今天我使用docker composer找到了这个老问题.Python日志记录模块检查输出是否为终端,因此您需要添加tty: true到服务中.例:
version: '2'
services:
django:
tty: true
command: python -u manage.py runserver 0.0.0.0:8080
ports:
- "8080:8080"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1133 次 |
| 最近记录: |