Docker 日志是排查容器故障、監控運行狀態的重要工具。下面從 日志查看命令、詳解字段、日志驅動、最佳實踐 四個方面給你詳細解析。
一、最常用日志命令
1. 查看容器日志(默認 stdout、stderr)
docker logs <container_name|container_id>
2. 實時滾動查看(類似 tail -f
)
docker logs -f <container_name>
3. 限制日志輸出行數
docker logs --tail 100 <container_name>
4. 查看某個時間之后的日志(如最近10分鐘)
docker logs --since 10m <container_name>
5. 查看某個時間范圍日志
docker logs --since "2024-06-01T10:00:00" --until "2024-06-01T12:00:00" <container_name>
二、示例日志格式詳解(默認 json-file 驅動)
示例:
{"log":"Starting server on port 8080...\n","stream":"stdout","time":"2025-06-19T01:30:20.214018732Z"}
字段 | 含義 |
---|---|
log | 輸出的實際日志內容(含換行符) |
stream | stdout 或 stderr |
time | 日志生成的 UTC 時間戳 |
三、日志驅動介紹(Docker 默認使用 json-file
)
Docker 支持多種日志驅動,可通過 --log-driver
設置:
驅動名稱 | 說明 |
---|---|
json-file | 默認驅動,日志以 JSON 文件保存在宿主機 |
local | 類似 json-file,但空間管理更優 |
syslog | 日志發給宿主機的 syslog 系統 |
journald | 使用 systemd-journald 接收 |
fluentd | 發送到 fluentd 收集器 |
awslogs | 發送到 AWS CloudWatch |
splunk | 日志推送到 Splunk |
none | 不記錄日志(不推薦) |
設置日志驅動(docker run 時):
docker run --log-driver=json-file my-app
四、日志文件在哪?
默認位置(json-file):
/var/lib/docker/containers/<container_id>/<container_id>-json.log
你可以用 cat
或 less
查看,也可以使用:
cat /var/lib/docker/containers/$(docker inspect --format='{{.Id}}' <name>)/*.log
五、日志輪轉與大小限制
長期運行容器會導致日志爆炸(占滿磁盤),建議配置:
docker run \--log-driver=json-file \--log-opt max-size=10m \--log-opt max-file=3 \my-app
含義:
max-size=10m
:單個日志文件最大 10MBmax-file=3
:最多保留 3 個文件(當前 + 2 個輪轉)
六、進階技巧
查看多個容器日志
docker-compose logs -f
日志導出
docker logs <container> > container.log
grep 關鍵字排查
docker logs <container> 2>&1 | grep ERROR
七、Kubernetes 中查看日志(補充)
如果你以后在用 K8s,可用:
kubectl logs <pod-name>
kubectl logs -f <pod-name> -c <container-name>
總結
場景 | 命令或技巧 | |
---|---|---|
實時看日志 | docker logs -f 容器 | |
看錯誤日志 | `docker logs 容器 | grep ERROR` |
限制日志大小 | --log-opt max-size/max-file | |
查看原始日志文件 | /var/lib/docker/containers/.../*.log | |
多容器統一查看 | docker-compose logs -f |