加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 03:29:03 所属栏目:安全 来源:网络整理
导读:我正在编写一个Dockerfile,它需要运行多个命令作为CMD指令的一部分,我认为正确的方法是运行一个shell脚本,主要守护进程通过exec执行.不幸的是,作为该过程的一部分,我的一些输出(stdout?stderr?我不知道,我不知道如何找出)迷失了. 这是shell脚本: #!/bin/s

我正在编写一个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

这是我用图片得到的:

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

我甚至都不确定这是谁的错. runserver命令是否根据其运行方式更改其输出?这是exec的问题吗?是docker / fig?

作为一个额外的数据点,我注意到在使用fig run web运行容器时我确实获得了所有输出,但是当我搞清楚时却没有,但我不明白它是如何不同或相关的.

注意:抱歉标签垃圾邮件,一旦我知道实际导致此效果的原因,我会减少标签.

最佳答案
今天我使用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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读