翼度科技»论坛 云主机 服务器技术 查看内容

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

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
docker logs无法实时输出脚本打印内容


背景&问题

我在docker-compose.yml的command参数后面加入了一行运行python脚本的命令:
  1. command:python test.py
复制代码
那么这条命令会在container生成的时候就开始运行。
但是通过docker logs -f 命令来查看日志时,我发现py脚本里通过print打印出来的东西并不会实时显示出来,而是程序执行完了才会显示出来,这并不是我想要的结果。
但如果进入container手动执行python脚本,就可以实时打印出来。

解决

在网上查找资料之后发现,在这种情况下,python会默认缓冲其输出,所以想要无缓冲输出,那么加一个“-u” 参数即可:
  1. command: python -u test.py
复制代码
这个时候再通过docker logs -f 来查看日志时,你就会看到实时打印出来的结果
问题解决!

docker logs不打印python程序输出
  1. docker logs --tail 50 --follow a8
复制代码
即使容器在正常运行,也不会有输出打印出来,等也没用,且不定时的会打印一两次,最后才发现,原来是python的IO有缓冲,stdout堵住了导致了
只需在python代码中修改print(flush=True)即可,如果是用的gunicorn或者logging等,需要重新配置下

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/server/323534d3b.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具