/var/lib/docker/containers/[容器ID]/[容器ID]-json.log
一般来说 docker 会把容器内 stdout 和 stderror 的内容打印到 json.log 中,如果增长太快的话需要看一下是不是你的 image 里相关的配置有问题,太多的东西都打到 stdout 去了。如果只是想关闭打印日志的话可以在 docker run 的时候加上参数 --log-driver="none"。
修改 --log-driver=json-file
重启docker服务: service docker restart即可
cat /dev/null >json.log 清空这个文件的内容,释放磁盘空间; 需要重启容器,才能继续记录日志。
#添加max-size参数来限制文件大小
docker run -it --log-opt max-size=10m --log-opt max-file=3 alpine ash
Docker容器所有的标准输出标准错误都会被Docker Daemon接管
Docker容器本身理应尽量无状态,容器内应用持久化的日志则有状态,频繁迁移不宜容器日志管理
Docker容器的应用日志,如果自己发往集中的日志处理中心,则为上上策,易统一;问题是成本高,得有钱买机器,还需统一化的标准
目标:
通过标准输出,传递Docker容器内部的应用持久化日志文件。
方法:
简单重构应用Dockerfile的CMD指令。
问题假设:
原先应用Dockerfile的CMD指令为CMD [“python”, “app.py”],应用打印日志的路径为/var/log/app.log。
具体实现:
第一步:在原先Dockerfile所在目录下,创建一个run.sh文件,文件内容为:
#!/bin/bash
tail -F /var/log/app.log &
exec python app.py
第二步:修改Dockerfile,删除原先的CMD,替换为三个指令。
指令一:ADD run.sh /;
指令二:RUN chmod +x run.sh;
指令三:CMD [“./run.sh”]
原理剖析:
run.sh中启动了一个后台进程,使用tail命令强制将/var/log/app.log的内容传输至标准输出,
随后使用exec命令将python app.py作为容器的主进程运行。
官网文档链接:
https://docs.docker.com/config/containers/logging/json-file/#usage
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!