docker 中的程序的输出(比如 `print`) 会被保存到磁盘吗?

发布于 2022-09-11 15:25:46 字数 589 浏览 13 评论 0

问题描述

服务器中的容器在运行了几天后,磁盘被占满了,经过查找大文件,发现/var/lib/docker路径下container 文件夹中有个以log结尾的文件非常大。删除后把程序启动起来,过了半小时在查看该目录:
ix62tS.md.jpg

问题出现的环境背景及自己尝试过哪些方法

当时临时办法是写了一个脚本定时删除该log文件。

代码中只有print输出,并没有保存log文件。

后来修改代码把打印输出去掉,就没有再出现log文件。我怀疑是docker自动收集了这些打印。

最后我还是不太确定是否是因为 docker会自动收集这些打印 而导致服务器磁盘占满。请各位前辈指点迷津。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

丢了幸福的猪 2022-09-18 15:25:46

你的print应该是存入到docker的日志中了。

  • 先查看下自己的日志信息,看下是否能够看到print的内容,如果有就是输出到log里了。
sudo docker logs -f container_id
  • 然后看下对应的日志的存储地址
sudo docker inspect container_id|grep log
  • 查看到地址log_path,查看对应的大小
sudo du -h log_path
初熏 2022-09-18 15:25:46

经过查阅资料了解到:

  • 上面的日志都属于标准输出(stdout),python 的 print golang的fmt.Println都属于stdout;
  • docker中日志记录机制称为日志驱动程序;

    • 每个 container 都是一个特殊的进程,由 docker daemon 创建并启动,由docker daemon守护和管理,所以docker daemon可以获取到container的stdout;
  • docker daemon 有一个默认的日志驱动程序,默认为json-file;

    • json-file 会把所有容器的标准输出和标准错误以json格式写入文件中,这个文件每行记录一个标准输出或标准错误并用时间戳注释;
  • 更改默认的日志启动程序即可,具体操作如下:

    • 编辑 docker deamon 配置文件:sudo vim /etc/docker/daemon.json
    • 增加一条:{"log-driver": "none"} (也可以添加{"log-opts": {"max-size": "10m" }}来控制log文件的大小)
    • 重新加载配置文件并重启docker服务:sudo systemctl daemon-reloadsudo systemctl restart docker
    • 修改配置后重新启动识别任务,没有产生log文件。

资料参考地址:
Docker 生产环境之日志 - JSON File 日志驱动程序
配置日志驱动程序

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文