【k8s】python日志在容器内不显示
现象
构建python服务镜像。在使用k8s pod部署时,kubectl logs不显示日志,而过段时间kubectl logs又能够看到日志。
其中,容器内通过
1 | python main.py |
启动python服务所有的日志使用print打印。
在使用docker run 启动容器时,docker logs 能够查看日志
根因结论
在k8s启动的pod会触发python print的buffer,导致print不能直接输出到控制台。只有当buffer满了才会输出到控制台
快速解决
参考链接 修改dockerfile,将最后
python main.py
改为
python -u main.py
根因分析
k8s pod底层继承于docker的deamon机制,即将pid为1的主程序以及其子程序的标准控制台输出追踪,并存储至/var/lib/docker/containers/<容器id>/<容器id>-json.log。
在使用docker logs/kubectl logs进行日志获取
因此在部署python的容器服务时,docker logs/kubectl logs获取不到的主要原因是print的标准控制台输出,产生了buffer,导致控制台输出不及时。解决该缓存问题或者禁止buffer即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!