如何查看Docker容器内Django应用的运行日志以排查代码错误?
Docker部署Django无报错日志的排查解决方法
1. 优先查看Docker原生容器日志
Docker默认会捕获容器内进程的标准输出(stdout)和标准错误(stderr),可以直接通过命令读取:
- 先列出所有容器(包含已停止的失败容器)获取容器ID/名称:
docker ps -a - 查看对应容器的历史日志:
docker logs <容器ID/容器名称> - 如需实时监听新产生的日志,可添加
-f参数:docker logs -f <容器ID/容器名称> - 如果你用docker-compose部署,可直接用
docker-compose logs <服务名>查看对应服务日志,加-f同样支持实时监听。
2. 调整配置保证日志输出到控制台
如果docker logs无内容,大概率是Django或应用服务器的日志默认输出到了本地文件,没有输出到标准输出,可按以下方式调整:
- 调试阶段可先开启Django的DEBUG模式:在
settings.py中设置DEBUG = True,会输出更完整的错误信息(生产环境务必关闭) - 如使用Gunicorn作为应用服务器,启动命令添加日志输出参数,强制输出到控制台:
gunicorn --access-logfile - --error-logfile - 项目名.wsgi:application
其中-代表输出到标准输出,可被Docker直接捕获 - 如使用uWSGI作为应用服务器,在配置中添加
logto = /dev/stdout,或启动时添加参数--logto /dev/stdout - 也可以直接在Django的
settings.py中配置全局日志规则,强制所有日志输出到控制台:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, }, 'root': { 'handlers': ['console'], 'level': 'INFO', }, }
3. 进入容器手动运行排查
如果以上方法还是无法拿到报错,可直接进入容器手动执行启动命令,直接查看终端输出:
- 若容器还在运行:
docker exec -it <容器ID/容器名称> /bin/bash - 若容器已经停止运行:
docker run -it --entrypoint /bin/bash <你的镜像名>
进入容器后手动执行原启动命令(比如python manage.py runserver 0.0.0.0:8000或对应的应用服务器启动命令),就能直接看到ModuleNotFoundError这类实时报错信息。
注意事项
容器部署场景下不要把日志写入容器内的本地文件,Docker默认不会采集本地文件内容,所有日志都尽量输出到标准输出/标准错误流。
内容的提问来源于stack exchange,提问作者A.Ktns
相关产品推荐
相关产品推荐

