Docker容器日志查看与配置
编辑来源:CSDN-Locutus
链接:https://blog.csdn.net/yjk13703623757/article/details/80283729
来源:CSDN-写代码的蓝胖子
链接:https://blog.csdn.net/huangliuyu00/article/details/90384345
1、问题
docker容器日志导致主机磁盘空间满了。docker logs -f container_name
噼里啪啦一大堆,很占用空间,不用的日志如何清理?
2、查看Docker容器日志
在linux上,容器日志一般存放在/var/lib/docker/containers/container_id/
下面, 以json.log结尾的文件(业务日志)很大。
查看各个日志文件大小的脚本docker_log_size.sh,内容如下:
#!/bin/sh
echo "======== docker containers logs file size ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
ls -lh $log
done
# 设置脚本可执行权限
chmod +x docker_log_size.sh
# 启动脚本
./docker_log_size.sh
查询结果显示:
======== docker containers logs file size ========
-rw-r-----. 1 root root 33K 4月 14 10:34 /var/lib/docker/containers/d57a8ec2ef7a0b7ffffe316bb00041404308358fa5244b95dd0d599a13f65245/d57a8ec2ef7a0b7ffffe316bb00041404308358fa5244b95dd0d599a13f65245-json.log
-rw-r-----. 1 root root 28K 1月 28 20:08 /var/lib/docker/containers/ad2e10a57aba2c1c9ff3cec6581db03b4b70e196648a4e8ecba66d75927fa44f/ad2e10a57aba2c1c9ff3cec6581db03b4b70e196648a4e8ecba66d75927fa44f-json.log
-rw-r-----. 1 root root 645 1月 18 16:31 /var/lib/docker/containers/212ef1629aeac225f7de56e1989912a352a3f92cd50d08c5fba388adb57ffde5/212ef1629aeac225f7de56e1989912a352a3f92cd50d08c5fba388adb57ffde5-json.log
-rw-r-----. 1 root root 374M 4月 14 11:03 /var/lib/docker/containers/a8831197437bddc86b807753e146d55070dc036125aa3d34fc67822140f8304d/a8831197437bddc86b807753e146d55070dc036125aa3d34fc67822140f8304d-json.log
-rw-r-----. 1 root root 15G 4月 14 10:41 /var/lib/docker/containers/c9721b7cf6e956e6250d43a93cdc9a7b421bb9338d35a5a5d021855004abb364/c9721b7cf6e956e6250d43a93cdc9a7b421bb9338d35a5a5d021855004abb364-json.log
-rw-r-----. 1 root root 3.2K 2月 25 11:41 /var/lib/docker/containers/d27972bdc595f1b87f2f49e5ee10fff2b3419b76e6d5103a0c08e11433079a71/d27972bdc595f1b87f2f49e5ee10fff2b3419b76e6d5103a0c08e11433079a71-json.log
-rw-r--r--. 1 root root 1.5G 4月 14 10:44 /var/lib/docker/containers/4e23e075d62ff9217d7bddd3dba04c9cb4477728860e73906d3b2af871a77372/4e23e075d62ff9217d7bddd3dba04c9cb4477728860e73906d3b2af871a77372-json.log
-rw-r-----. 1 root root 3.1G 4月 14 11:02 /var/lib/docker/containers/0bc74214f5eacf999f10caa43405701b8381497e01197e9d4f27e1a021d8aa79/0bc74214f5eacf999f10caa43405701b8381497e01197e9d4f27e1a021d8aa79-json.log
-rw-r-----. 1 root root 12G 4月 14 11:03 /var/lib/docker/containers/e1691d4090e7a526f0f792d0b91f5814145393954dada013c76f8b5d77401a89/e1691d4090e7a526f0f792d0b91f5814145393954dada013c76f8b5d77401a89-json.log
-rw-r-----. 1 root root 54K 3月 10 09:41 /var/lib/docker/containers/61fd9b363b71fd0113769f292e5f393d325a230e6a030775a5ce88c670897f1c/61fd9b363b71fd0113769f292e5f393d325a230e6a030775a5ce88c670897f1c-json.log
-rw-r-----. 1 root root 22M 4月 14 11:03 /var/lib/docker/containers/b85667dfa132e108c5c21f35c130e8bce60faedcec5377cabcd49a34e82fe180/b85667dfa132e108c5c21f35c130e8bce60faedcec5377cabcd49a34e82fe180-json.log
-rw-r-----. 1 root root 18M 4月 14 11:02 /var/lib/docker/containers/9185d37555557b1213dc57e83e491985772785f1b8b4dbaa93837bffb7f4d2f3/9185d37555557b1213dc57e83e491985772785f1b8b4dbaa93837bffb7f4d2f3-json.log
3、清理Docker容器日志(治标)
如果docker容器正在运行,那么使用rm -rf
方式删除日志后,通过df -h
会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf
或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。
正确姿势是cat /dev/null > *-json.log
,当然你也可以通过rm -rf
删除后重启docker。
提供一个日志清理脚本clean_docker_log.sh
,内容如下:
#!/bin/sh
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
echo "======== end clean docker containers logs ========"
# 设置脚本可执行权限
chmod +x clean_docker_log.sh
# 启动脚本
./clean_docker_log.sh
但是,这样清理之后,随着时间的推移,容器日志会像杂草一样,卷土重来。
4、设置Docker容器日志大小(治本)
全局设置
新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:
{
"registry-mirrors": [
"https://reg-mirror.qiniu.com/",
"https://hub-mirror.c.163.com/",
"https://mu8wy6wu.mirror.aliyuncs.com/"
],
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。
// 重启docker守护进程
systemctl daemon-reload
systemctl restart docker
# 注意:设置的日志大小,只对新建的容器有效。
容器设置
另外在创建容器时也可以指定log文件的限制,添加log-opts参数,样例如下:
docker run \
--log-opt max-size=500m \
--log-opt max-file=3 \
......
max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。
5、参考文章
https://blog.csdn.net/xunzhaoyao/article/details/72959917
https://www.cnblogs.com/testzcy/p/7904829.html
https://docs.docker.com/config/containers/logging/configure/
- 0
- 0
-
赞助
赞赏 -
分享