在Docker中对日志进行按大小分割(log rotation)是一个常见的需求,因为长时间运行的容器可能会生成大量日志,导致磁盘空间不足。Docker提供了内置的日志管理功能,可以通过配置日志驱动来实现日志的自动分割。以下是具体步骤:
### 1. 使用Docker的内置`json-file`日志驱动
Docker的默认日志驱动是`json-file`,它支持日志轮转。您可以在运行容器时通过`--log-opt`参数来配置日志大小和文件数。
#### 命令示例
运行一个新容器,并设置单个日志文件的最大大小为10MB,并且最多保留3个旧的日志文件:
```bash
docker run -d --name your-container \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
your-image
```
在这个示例中,`max-size=10m` 表示日志文件达到10MB时会进行分割,`max-file=3` 表示除了当前写入的日志文件外,最多保留3个旧的日志文件。
### 2. 配置默认的Docker日志策略
如果您想对所有容器应用统一的日志轮转策略,可以在Docker的守护进程配置文件中设置这些参数。通常这个配置文件位于`/etc/docker/daemon.json`。
#### 修改`daemon.json`配置示例
```json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
```
保存文件后,需要重启Docker服务以使配置生效:
```bash
sudo systemctl restart docker
```
### 3. 使用外部日志管理工具
如果内置日志驱动的功能不满足需求,您也可以考虑使用如`logrotate`这样的外部日志管理工具。`logrotate`可以非常灵活地配置日志文件的轮转,包括按大小、按日期分割等。
#### 配置`logrotate`示例
首先,为Docker容器日志创建一个`logrotate`配置文件,比如`/etc/logrotate.d/docker-container`:
```plaintext
/var/lib/docker/containers/*/*.log {
rotate 3
size 10M
copytruncate
missingok
notifempty
compress
delaycompress
endscript
}
```
这个配置会针对所有Docker容器日志,当大小达到10MB时进行分割,最多保留3个文件,压缩旧文件。
### 注意事项
- 确保容器的日志输出路径与`logrotate`的配置路径相匹配。
- `copytruncate`选项可以在不重启容器的情况下轮转日志,但可能会丢失极少量日志数据。
通过上述任一方法,都可以实现对Docker容器日志按大小进行有效的分割,帮助管理日志文件的大小和数量,防止磁盘空间快速消耗。