要管理 Docker 的 Log 前必須先調整每個 container 各自的 Log 導出為 stdout 與 stderr 格式,這樣才能由 Docker 統一管理/顯示所有 container 的 Log 訊息。
以 Nginx 為例,必須將預設的 Log 檔路徑導出為 stdout 與 stderr 如下述 Dockerfile 範例
... RUN \ # Forward request and error logs to docker log collector && ln -sf /dev/stdout /var/log/nginx/access.log \ && ln -sf /dev/stderr /var/log/nginx/error.log ...
以 Mariadb 為例,新增資料庫設定檔 /etc/mysq/mariadb.conf.d/db-log.cnf
[mysqld] log_error = /dev/stdout
不用進入 container 系統也能直接檢視任一個 container(或 service) 的 Log。
# docker logs --tail 50 <container-name> # docker-compose logs --tail 50 <service-name>
方法一: docker-compose.yml
方法二: Host 端的 Logrotate
/etc/logrotate.d/docker-containers
/var/lib/docker/containers/*/*.log { rotate 31 daily nocompress missingok notifempty copytruncate }