Docker 控制容器日志大小的方法

本文介绍了如何使用Docker的log-opt参数和修改daemon配置文件,以控制容器的日志大小,防止磁盘空间不足。详细步骤包括设置启动时的限制和全局配置默认限制。
Docker 控制容器日志大小的方法

Docker 是一种流行的容器技术,可以用来打包、分发和运行应用程序。使用 Docker,您可以将应用程序及其依赖项一起封装到一个容器中,并确保它们可以在不同的环境中顺利运行。在使用 Docker 过程中,控制容器日志大小是一种有用的技巧,可以防止容器日志过大导致磁盘空间不足。本教程将向您介绍如何使用 Docker 控制容器日志大小。

准备工作
确保您已经安装了 Docker 并启动了 Docker 服务。如果您尚未安装 Docker,请访问 Docker 官网 获取安装说明。

1. 使用 --log-opt 参数限制容器日志大小
在启动容器时,可以使用 --log-opt 参数设置日志驱动程序的选项。我们将使用 max-size 和 max-file 选项来限制容器日志的大小。

示例

docker run -d \
  --name example-container \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  nginx:latest

在这个例子中,我们设置了以下选项:

max-size=10m:限制单个日志文件的最大大小为 10MB。
max-file=3:限制日志文件的数量为 3 个。
当日志文件达到 10MB 时,Docker 会自动轮换日志文件,保留最新的 3 个日志文件。

修改 Docker daemon 配置文件
如果您希望为所有容器设置默认的日志大小限制,可以修改 Docker daemon 配置文件。配置文件的位置根据您的操作系统而异,以下是一些常见操作系统的配置文件位置:

Ubuntu 和 Debian:/etc/docker/daemon.json
CentOS:/etc/sysconfig/docker
示例
打开或创建 Docker daemon 配置文件,并添加以下内容

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

这里的配置与前面的 --log-opt 参数相同,将为所有容器限制日志文件大小。

保存并关闭配置文件。然后重启 Docker 服务以使更改生效:

sudo systemctl restart docker

现在,所有新启动的容器都将遵循配置文件中定义的日志大小限制。

结束语
通过本教程,您已经学会了如何使用 Docker 控制容器日志大小。这有助于防止容器日志占用过多的磁盘空间,确保系统的稳定运行。希望这篇教程对您有所帮助!

Docker中对日志进行按大小分割是常见需求,可通过配置日志驱动来实现日志的自动分割。同时,对于特定应用如nginx,也有相应的日志切分方法。 ### 配置Docker日志驱动 Docker提供了内置的日志管理功能,可通过配置日志驱动来实现日志的自动分割。长时间运行的容器可能会生成大量日志,导致磁盘空间不足,配置日志驱动能解决这一问题,但具体的配置步骤文中未详细提及 [^1]。 ### nginx容器日志切分 当nginx采用docker部署时,会出现日志没有自动切割,导致`access.log`无限增大的问题,原因是nginx容器里面没有`logrotate`服务。可使用以下脚本进行日志切分: ```bash #!/bin/bash current_path=/var/log/nginx YEAR=$(date +%Y) MONTH=$(date +%m) DAY=$(date +%d) YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) LOGS_PATH=$current_path/../logs LOGS_BAK_PATH=$current_path/../logs/logs-bak # 得到1级目录名 if [[ $(($DAY)) -eq 1 ]] then if [[ $(($MONTH)) -eq 1 ]] then LOGS_BAK_PATH=$LOGS_BAK_PATH/$((${YEAR}-1))-12 else if [[ $(($MONTH)) -gt 10 ]] then LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-$((${MONTH}-1)) else LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-0$((${MONTH}-1)) fi fi else LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-${MONTH} fi # 创建目录 mkdir -p $LOGS_BAK_PATH/${YESTERDAY} # 复制当前的日志文件到备份的目录 cp ${LOGS_PATH}/access.log ${LOGS_BAK_PATH}/${YESTERDAY}/access_${YESTERDAY}.log cp ${LOGS_PATH}/error.log ${LOGS_BAK_PATH}/${YESTERDAY}/error_${YESTERDAY}.log # 清空日志 > ${LOGS_PATH}/access.log > ${LOGS_PATH}/error.log ``` 此脚本会将nginx的`access.log`和`error.log`按日期进行备份,并清空原日志文件 [^3][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值