> **三點總結** > > * Docker 容器的控制台日誌不是儲存在系統**記憶體中,而是以檔案形式儲存在主機的磁碟上**。 > * `docker logs` 指令的作用是讀取這些儲存的日誌檔案並顯示出來。 > * 為了防止日誌檔案無限增大,**設定日誌輪替選項(`max-size`, `max-file`)**至關重要。 ## 1\. 日誌儲存在哪裡?如何儲存? {#sec-37c2a29cff35} [[Docker]] 會捕捉容器的標準輸出 (stdout) 和標準錯誤 (stderr) 串流,並透過**日誌驅動程式 (Logging Driver)** 進行處理。如果沒有特別設定,Docker 預設會使用 `json-file` 日誌驅動程式。 * **儲存位置**:容器的日誌會以 JSON 格式的檔案儲存在主機系統的特定路徑。通常路徑如下: * `/var/lib/docker/containers/[컨테이너_ID]/[컨테이너_ID]-json.log` * **`docker logs` 指令**:這個指令實際上並不是顯示記憶體中的內容,而是讀取上述的 JSON 日誌檔案並顯示在終端機上。 ![ChatGPT 圖片 2026年 5月 12日 下午 12_37_29.png](/media/whitedec/blog_img/ff3498a786c645ecb031d714a053d4a4.webp) ## 2\. 日誌持續累積會導致磁碟空間不足嗎? {#sec-4e6257ec2aba} 是的,沒錯。如果不採取任何措施,日誌檔案會不斷增大,最終可能佔滿主機的磁碟空間。為了防止這種情況發生,Docker 提供了**日誌輪替 (Log Rotation)** 選項,以限制日誌檔案的大小和數量。 例如,在執行 `docker run` 指令時,可以添加以下選項: ``` docker run -d \ --log-driver json-file \ --log-opt max-size=10m \ --log-opt max-file=3 \ nginx ``` * `--log-opt max-size=10m`:將單一檔案的最大日誌大小限制為 **10MB**。 * `--log-opt max-file=3`:將日誌檔案的最大數量限制為 **3 個**。如果超過 3 個,最舊的檔案將會被刪除。 這樣設定後,該容器的日誌最多只會佔用 30MB (10MB * 3 個) 的磁碟空間。 *** ## 3. 在 `docker-compose.yml` 檔案中設定 {#sec-890442ea3ac0} 在 Docker Compose 中,您可以在 `docker-compose.yml` 檔案中輕鬆地為每個服務設定日誌選項。 您可以將其視為 `docker run` 指令的 `--log-opt` 旗標以 YAML 格式呈現。 以下是在名為 `my-app` 的服務中應用日誌輪替的範例: ``` services: my-app: image: your-app-image # ... 其他設定 ... deploy: resources: limits: memory: 512M # 👇 這部分是日誌設定。 logging: driver: "json-file" # 要使用的日誌驅動程式 (預設值,可省略) options: max-size: "10m" # 每個檔案的最大大小:10MB max-file: "3" # 最大檔案數量:3個 ``` * **`logging`**:這是啟動該服務日誌設定的關鍵字。 * **`driver`**:指定要使用的日誌驅動程式。`json-file` 是預設值。 * **`options`**:設定要傳遞給驅動程式的選項。 * **`max-size`**:與 `docker run` 的 `--log-opt max-size` 相同。 * **`max-file`**:與 `docker run` 的 `--log-opt max-file` 相同。 現在,當您使用 `docker-compose up` 啟動此服務時,`my-app` 容器的日誌將會自動輪替,最多只會佔用 30MB (10MB * 3 個) 的磁碟空間。 ## 4\. 為所有容器設定預設值 {#sec-1a0729e53c34} 如果您覺得為每個容器逐一設定選項很麻煩,並希望為整個系統應用預設策略,那麼修改 **Docker 守護程序 (Daemon) 設定**檔案是最佳方法。 1. 開啟或建立 `/etc/docker/daemon.json` 檔案。(如果檔案不存在,請新建立一個。) 2. 寫入以下內容: ```json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } ``` 3\. 重新啟動 Docker 守護程序。 ```bash sudo systemctl restart docker ``` 這樣設定後,未來建立的**所有容器**,除非有額外的日誌設定,否則都會自動遵循此策略。當然,如果在 `docker-compose.yml` 檔案或 `docker run` 指令中為特定容器指定了不同的日誌選項,那麼**個別設定將優先於守護程序設定**。 * **個別服務設定**:在 `docker-compose.yml` 檔案的 `logging` 區塊中進行設定是最常見且方便的方法。 * **全域預設設定**:若要為伺服器上的所有容器應用統一策略,請修改 `/etc/docker/daemon.json` 檔案。