Docker 容器日志查看和清理

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Docker 容器日志查看和清理

Docker 容器日志查看


查看所有容器数据大小并按倒序排列

du -d1 -h /var/lib/docker/containers | sort -rh

du: 用于估算文件或目录空间使用量。


-d1: 仅显示深度为1的目录,即只显示直接子目录的信息。


-h: 以人类可读的格式显示文件大小。


/var/lib/docker/containers: 要查看的目录路径,这是 Docker 存储容器数据的默认路径。


sort -rh: 对 du 的输出进行排序。-r 表示逆序(降序),-h 表示以人类可读的格式排序(KB、MB、GB)。

8.png

上图可以看到容器ID为 5c51773bc35d19d69c8f07895232295e4abeb0c9f25e25ca3884fec6ebd6f3fa 的数据较大。

cd /var/lib/docker/containers/5c51773bc35d19d69c8f07895232295e4abeb0c9f25e25ca3884fec6ebd6f3fa
# 查看容器数据目录下的文件大小
du -sh * | sort -rh

9.png

Docker 容器日志清理


单容器日志清理


直接使用 rm -rf <container-id>-json.log 删除日志文件可能导致文件被占用,因为容器仍在运行,并且可能仍在使用该文件的文件描述符。这样的操作可能会导致文件系统空间不会立即释放。


为确保不中断容器日志记录,并释放文件描述符,可以使用以下命令:

truncate -s 0 <container-id>-json.log

这个命令会将指定文件的大小截断为零字节,但不会删除文件。这样,容器的日志文件会被清空,但文件描述符仍然保持打开,不会影响正在运行的容器。

10.png

所有容器日志清理


创建了一个名为 clean_docker_logs.sh的清理脚本

touch clean_docker_logs.sh
vi clean_docker_logs.sh

复制下面内容至 clean_docker_logs.sh

#!/bin/bash
# Docker容器日志清理脚本
# 设置Docker日志文件存储路径
log_path="/var/lib/docker/containers"
# 获取所有容器ID
container_ids=$(ls -1 $log_path)
# 循环处理每个容器
for container_id in $container_ids; do
    # 构造日志文件路径
    log_file="${log_path}/${container_id}/${container_id}-json.log"
    # 检查日志文件是否存在
    if [ -f "$log_file" ]; then
        echo "清理容器 ${container_id} 的日志文件: ${log_file}"
        # 清空日志文件
        truncate -s 0 "$log_file"
    else
        echo "未找到容器 ${container_id} 的日志文件: ${log_file}"
    fi
done
echo "日志清理完成。"

将 clean_docker_logs.sh 脚本复制到 /usr/local/bin 目录(这个目录通常包含用户自己安装的可执行文件),并给予执行权限:

cp clean_docker_logs.sh /usr/local/bin/
chmod +x /usr/local/bin/clean_docker_logs.sh

然后执行清理脚本:

sh /usr/local/bin/clean_docker_logs.sh

执行完清理脚本查看所有容器的日志已清理完毕

image.png

定时清理


如果想将清理容器日志的操作做成一个定时任务,可以使用 cron 作业。


编辑 cron 表

crontab -e

在文件末尾添加类似如下行,以每天凌晨凌晨执行清理任务为例:

0 0 * * * /usr/local/bin/clean_docker_logs.sh

第一个字段(0):分钟(0-59)


第二个字段(0):小时(0-23)


第三个字段():天(1-31)


第四个字段():月份(1-12)


第五个字段(*):星期几(0-6,0 表示星期日)


Docker 容器的日志大小可以通过 Docker Daemon 的配置进行全局设置,也可以通过在运行容器时指定参数进行单独设置。


设置 Docker 容器日志大小限制


全局设置


要在 Docker Daemon 上全局设置日志大小,你需要修改 Docker Daemon 的配置文件(通常是 /etc/docker/daemon.json)。


打开 Docker Daemon 配置文件:

nano /etc/docker/daemon.json

如果文件不存在,你可能需要创建它。在文件中添加以下配置:

   {
     "log-driver": "json-file",
     "log-opts": {
       "max-size": "10m",  # 设置日志文件最大大小
       "max-file": "3"     # 设置最大日志文件数量
     }
   }

这里的 "max-size": "10m" 表示每个日志文件的最大大小为 10MB,而 "max-file": "3" 表示保留最多 3 个旧的日志文件。


重新启动 Docker 服务,以应用新的配置:

 systemctl restart docker

单容器设置


如果你想为单个容器设置不同的日志大小,可以在运行容器时使用 --log-opt 参数。

docker run -d --log-opt max-size=10m --log-opt max-file=3 your_image

这样会覆盖 Docker Daemon 全局设置,为该容器设置特定的日志大小。


常用命令


列出当前目录和文件的大小

du -h -x --max-depth=1 | sort -rh
  • du:用于估算文件空间使用情况。


  • -h:以人类可读的格式显示文件大小(例如,1K、234M、2G)。


  • -x:跳过不同文件系统的目录。


  • –max-depth=1:只显示指定目录的总计,不进入子目录。


  • sort -rh:以逆数值顺序(-r)排序,并使用人类可读的数值(-h)
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
17天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
157 77
|
25天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
3天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
30 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
9天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
30 3
实战~如何组织一个多容器项目docker-compose
|
3天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
16 4
|
19天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
60 3
|
25天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
31 2
|
25天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
66 7
|
25天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
32 5
|
25天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
55 4

热门文章

最新文章