manage.py不会在Raspberry Pi上的Docker中记录到stdout/stderr

Lio*_*ion 6 python django docker docker-compose

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

我有一个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'
Run Code Online (Sandbox Code Playgroud)

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

pi@pi2:/myapp $ sudo docker logs myapp_1
pi@pi2:/myapp $ 
Run Code Online (Sandbox Code Playgroud)

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

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

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

Yan*_*ann 9

docker logs默认情况下显示I/O流STDOUTSTDERR.检查 Django的记录在您的settings.py配置是否正确.

例如:

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',
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

资源

另外值得一提的是:

在Django 1.10中更改:

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

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