我正在编写一个 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
命令应该接管并且容器运行直到该进程退出。
实际问题是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
,但我不明白这有什么不同或相关。
注意:抱歉标签垃圾邮件,一旦我知道实际导致这种效果的原因,我会减少标签。