解决docker logs无法实时输出脚本打印内容的方法

目录
文章目录隐藏
  1. 问题
  2. 解决
  3. docker logs 不打印 python 程序输出

解决 docker logs 无法实时输出脚本打印内容的方法

本笔记主要是记录解决 docker logs 无法实时输出脚本打印内容的方法,个人经验总结,希望对大家有参考价值。

问题

问题源于我在 docker-compose.yml 的 command 参数后面加入了一行运行 python 脚本的命令:

command:python test.py

那么这条命令会在 container 生成的时候就开始运行。

但是通过docker logs -f命令来查看日志时,我发现 py 脚本里通过 print 打印出来的东西并不会实时显示出来,而是程序执行完了才会显示出来,这并不是我想要的结果。

但如果进入 container 手动执行 python 脚本,就可以实时打印出来。

解决

在网上查找资料之后发现,在这种情况下,python 会默认缓冲其输出,所以想要无缓冲输出,那么加一个-u参数即可:

command: python -u test.py

这个时候再通过docker logs -f来查看日志时,你就会看到实时打印出来的结果。

问题解决!

docker logs 不打印 python 程序输出

docker logs --tail 50 --follow a8

即使容器在正常运行,也不会有输出打印出来,等也没用,且不定时的会打印一两次,最后才发现,原来是 python 的 IO 有缓冲,stdout 堵住了导致了

只需在 python 代码中修改 print(flush=True)即可,如果是用的 gunicorn 或者 logging 等,需要重新配置下。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系maynote@foxmail.com处理
码云笔记 » 解决docker logs无法实时输出脚本打印内容的方法

发表回复