在Raspberry Pi上,manage.py没有登录到Docker中的stdout / stderr

时间:2017-10-16 18:13:08

标签: python django docker docker-compose

在Raspberry Pi 2上,我使用图像resin/rpi-raspbian:stretch来运行Django应用程序。在我的Dockerfile中,我安装python3包并使用ENTRYPOINT python3 manage.py runserver 0:8000启动应用程序。这可行,但是当我的代码抛出错误时,我使用docker log命令得到NO输出。

实施例

我有一个ImportError。当我使用docker exec手动运行命令时,我得到了预期的异常:

pi@pi2:/etc/docker/container/pms $ sudo docker exec -it pms_app_1 python3 manage.py runserver 0:8000
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x75de3228>
[...]
ImportError: No module named 'ws4redisfrontend'

但是当我使用docker-compose运行容器然后打开日志时,它们会被清空:

pi@pi2:/myapp $ sudo docker logs myapp_1
pi@pi2:/myapp $ 

此行为仅适用于manage.py电话。例如,当我像这样扩展入口点时:

ENTRYPOINT python3 -c "print('printed by python inline script')" && python3 manage.py runserver 0:8000

我在容器日志中看到了由python内联脚本打印的。作为Python / Django的新手,我无法理解为什么会这样。但是,正如我的打印示例有效,它似乎是一个Django问题,并没有Python的一般问题。我错过了什么?调试模式在settings.py中激活。

2 个答案:

答案 0 :(得分:7)

docker logs默认显示I / O流 STDOUT STDERR 。检查是否 <{1}}中的Django logging已正确配置。

例如:

settings.py

Source

另外值得一提:

  

在Django 1.10中更改:

     

在旧版本中,编写了日志消息   到sys.stderr而不是通过Python日志记录处理。

https://docs.djangoproject.com/en/1.11/ref/django-admin/#runserver

答案 1 :(得分:0)

我不确定这是否是我同样遇到的问题,但是在我的情况下,我无法在使用docker-compose的Docker控制台中看到来自Django的任何错误信息。例如,如果我在任何进口商品中都有错字,什么都不会显示,那么我的容器就不会起床。

帮助我的是this thread的回答,在我的docker-compose文件中添加了“ tty:true”之后,它得到了修复。现在,我可以看到所有错误以及常规打印。

希望它会帮助某人。