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

标签 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'

但是当我使用 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 的一般问题。我错过了什么? Debug模式在 settings.py 中激活。

最佳答案

docker logs默认显示 I/O 流 STDOUTSTDERR。检查是否 Django logging在您的 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',
        },
    },
}

Source

还值得一提:

Changed in Django 1.10:

In older versions, log messages were written to sys.stderr instead of being handled through Python logging.

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

关于python - manage.py 不会在 Raspberry Pi 上的 Docker 中登录到 stdout/stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46776596/

相关文章:

Python arcpy.mapping 并刷新文档

mysql - 具有不断变化的行数据的 Memcached

php - PHP-我应该如何精确定义版本

python - 如何通过 django 中的 url 传递日期和 id

python - 如何在每次循环调用时更新 Python 函数参数?

python - 计算质数

python - 两个Django项目共享数据库报 "table "auth_permission"already exists"错误如何解决

Python (django) 环境变量

amazon-web-services - 如何让traefik在我的云架构上工作?

docker - 当testcafe在docker容器中运行时,如何访问在localhost中运行的应用程序?