manage.py不会login到树莓派上的Docker的stdout / stderr
在Raspberry Pi 2上,我使用image resin/rpi-raspbian:stretch
来运行Django应用程序。 在我的Dockerfile中,我安装python3
软件包并使用ENTRYPOINT python3 manage.py runserver 0:8000
来启动应用程序。 这工作,但是当我的代码抛出错误,我没有使用docker log
命令输出。
例
我有一个ImportError。 当我使用docker exec
手动运行命令时,我得到了预期的exception:
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的问题。 我错过了什么? debugging模式在settings.py
激活。
docker logs
默认显示I / OstreamSTDOUT和STDERR 。 检查你的settings.py
Django日志是否正确configuration。
例如:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler' }, }, 'loggers': { '': { # 'catch all' loggers by referencing it with the empty string 'handlers': ['console'], 'level': 'DEBUG', }, }, }
资源
另外值得一提的是:
在Django 1.10中更改:
在较早的版本中,日志消息被写入sys.stderr,而不是通过Python日志logging进行处理。
https://docs.djangoproject.com/en/1.11/ref/django-admin/#runserver