在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容器日志按大小進行有效的分割,幫助管理日志文件的大小和數量,防止磁盤空間快速消耗。