JSON 檔案記錄驅動程式
預設情況下,Docker 會擷取所有容器的標準輸出(和標準錯誤),並使用 JSON 格式將它們寫入檔案中。JSON 格式會使用其來源(`stdout` 或 `stderr`)及其時間戳記來註釋每一行。每個記錄檔僅包含關於一個容器的資訊。
{
"log": "Log line is here\n",
"stream": "stdout",
"time": "2019-01-01T11:11:11.111111111Z"
}
**警告**
`json-file` 記錄驅動程式使用基於檔案的儲存空間。這些檔案設計為 Docker 常駐程式專用。使用外部工具與這些檔案互動可能會干擾 Docker 的記錄系統並導致非預期的行為,因此應避免這種情況。
用法
若要使用 `json-file` 驅動程式作為預設記錄驅動程式,請在 `daemon.json` 檔案中將 `log-driver` 和 `log-opts` 鍵設定為適當的值,該檔案位於 Linux 主機上的 `/etc/docker/` 或 Windows Server 上的 `C:\ProgramData\docker\config\`。如果檔案不存在,請先建立它。有關使用 `daemon.json` 設定 Docker 的詳細資訊,請參閱 [daemon.json](https://docker-docs.dev.org.tw/reference/cli/dockerd/#daemon-configuration-file)。
以下範例將記錄驅動程式設定為 `json-file`,並將 `max-size` 和 `max-file` 選項設定為啟用自動記錄輪替。
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
**注意**
必須以字串形式提供 `daemon.json` 設定檔中的 `log-opts` 設定選項。因此,必須將布林值和數值(例如,上例中 `max-file` 的值)括在引號 (`"`) 中。
重新啟動 Docker,讓變更對新建立的容器生效。現有容器不會自動使用新的記錄設定。
您可以使用 `--log-driver` 旗標搭配 `docker container create` 或 `docker run` 來設定特定容器的記錄驅動程式
$ docker run \
--log-driver json-file --log-opt max-size=10m \
alpine echo hello world
選項
`json-file` 記錄驅動程式支援下列記錄選項
選項 | 說明 | 範例值 |
---|---|---|
max-size | 記錄輪替前的最大大小。一個正整數加上表示測量單位的修飾符(`k`、`m` 或 `g`)。預設值為 -1(無限制)。 | --log-opt max-size=10m |
max-file | 可以存在的記錄檔最大數量。如果輪替記錄建立了過多的檔案,則會移除最舊的檔案。**僅在也設定 `max-size` 時有效。** 一個正整數。預設值為 1。 | --log-opt max-file=3 |
標籤 | 適用於啟動 Docker 常駐程式時。此常駐程式接受的以逗號分隔的記錄相關標籤清單。用於進階的[記錄標籤選項](https://docker-docs.dev.org.tw/engine/logging/log_tags/)。 | --log-opt labels=production_status,geo |
labels-regex | 類似於且相容於 `labels`。用於比對記錄相關標籤的正則表達式。用於進階的[記錄標籤選項](https://docker-docs.dev.org.tw/engine/logging/log_tags/)。 | --log-opt labels-regex=^(production_status|geo) |
環境 | 適用於啟動 Docker Daemon 時。Daemon 接受以逗號分隔的日誌相關環境變數清單。用於進階的日誌標籤選項。 | --log-opt env=os,customer |
env-regex | 類似於且相容於 env 。用於匹配日誌相關環境變數的正規表達式。用於進階的日誌標籤選項。 | --log-opt env-regex=^(os|customer) |
compress | 切換已輪替日誌的壓縮功能。預設為 disabled (停用)。 | --log-opt compress=true |
範例
此範例啟動一個 alpine
容器,該容器最多可以有 3 個日誌檔,每個檔案大小不超過 10 MB。
$ docker run -it --log-opt max-size=10m --log-opt max-file=3 alpine ash