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

 更新时间:2024年07月01日 09:32:19   作者:小冻子  

这篇文章主要介绍了如何解决docker logs无法实时输出脚本打印的内容问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

目录
  • docker logs无法实时输出脚本打印内容
    • 背景&问题
    • 解决
  • docker logs不打印python程序输出
    • 总结

      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等,需要重新配置下

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持小闻网。

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。