Docker日志管理實用方法
docker logs
命令可快速獲取容器日志,常用選項包括:-f
(實時跟蹤日志)、--tail
(僅顯示最后N行,如--tail 10
)、--since
(顯示指定時間后的日志,如--since "2025-09-01"
)、--until
(顯示指定時間前的日志)。例如,docker logs -f --tail 20 my_container
可實時查看容器最新20行日志。json-file
驅動(將日志存儲為JSON文件),可通過--log-driver
選項為單個容器指定驅動(如docker run --log-driver=syslog
),或在/etc/docker/daemon.json
中全局配置(如{"log-driver": "json-file"}
)。修改全局配置后需重啟Docker服務(systemctl restart docker
)。日志輪轉是防止日志文件無限增長的關鍵,主要通過max-size
(單個日志文件最大大?。┖?code>max-file(保留的日志文件數量)參數實現:
/etc/docker/daemon.json
,添加log-opts
字段,例如:{"log-driver": "json-file","log-opts": {"max-size": "10m","max-file": "3"}}
(每個日志文件最大10MB,保留3個文件)。修改后重啟Docker生效,所有新容器將自動應用此策略。--log-opt
參數指定,例如:docker run -d --name my_nginx --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 nginx:latest
(僅對該容器生效)。docker-compose.yml
文件的logging
字段中設置,例如:services:
web:
image: nginx:latest
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
該配置對Compose項目中的所有服務生效。docker inspect <container_id>
查看LogConfig
字段,確認max-size
和max-file
是否生效;或直接查看日志文件路徑(docker inspect --format='{{.LogPath}}' <container_name>
),觀察文件大小和數量變化。對于生產環境,建議使用集中式日志管理工具,實現日志的統一收集、存儲和分析:
input
為beats
或tcp
),存儲到Elasticsearch,再通過Kibana進行可視化分析??墒褂肈ocker Compose快速部署ELK,例如:version: '3'
services:
elasticsearch:
image: elasticsearch:7.10.0
environment:
- discovery.type=single-node
ports:
- "9200:9200"
logstash:
image: logstash:7.10.0
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
ports:
- "5044:5044"
kibana:
image: kibana:7.10.0
ports:
- "5601:5601"
配置Logstash的logstash.conf
文件,添加Docker日志輸入和Elasticsearch輸出。forward
輸入),轉發到Elasticsearch或其他存儲。例如,Fluentd配置文件fluent.conf
:<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<match docker.*>
@type elasticsearch
host localhost
port 9200
logstash_format true
flush_interval 10s
</match>
啟動Fluentd后,在Docker容器啟動時指定--log-driver=fluentd --log-opt fluentd-address=localhost:24224
,即可將日志發送到Fluentd。stdout
和stderr
(Docker默認捕獲這兩個流的日志),而非直接寫入文件。例如,在Node.js應用中,使用console.log
或winston
庫輸出到stdout
;在Python應用中,使用logging
模塊配置StreamHandler
輸出到stdout
。DEBUG
(輸出詳細信息),生產環境建議使用INFO
或WARN
(減少不必要的日志),避免日志文件過大。例如,在Spring Boot應用中,通過application.properties
設置logging.level.root=INFO
。若內置json-file
驅動無法滿足需求,可使用logrotate
工具(Linux系統自帶)進行日志輪轉。創建/etc/logrotate.d/docker-container
配置文件,例如:
/var/lib/docker/containers/*/*.log {
rotate 3
size 10M
copytruncate
missingok
notifempty
compress
delaycompress
}
該配置表示:當日志文件大小達到10MB時進行分割,最多保留3個文件,使用copytruncate
(不重啟容器的情況下輪轉日志,可能丟失少量數據)。