Posted at

Dockerコンテナのログは標準オプションでローテートできる

More than 1 year has passed since last update.


TL;DR

docker run では --log-opt max-size--log-opt max-file を指定


docker-run

docker run --rm hello-world \

--log-opt max-size=10m \
--log-opt max-file=3

docker-compose では同オプションをサービスごとの logging で定義


docker-compose.yml

version: "3"

services:
hello:
image: "hello-world:latest"
logging:
driver: "json-file" # defaults if not specified
options:
max-size: "10m"
max-file: "3"

YAML の max-size, max-file は明示的に文字列型で記述しないとエラーとなる。


概要

「docker ログ rotate」でググるlogrotate を使っている例がよくありますが、

/var/lib/docker/containers/*/*.log のローテートは標準のオプションで実現できます。


実践


docker run の場合



  • --log-optmax-sizemax-file を指定します。


  • max-size には k, m, g といった単位が使用できます。


docker-run

docker run --rm hello-world \

--log-opt max-size=10m \
--log-opt max-file=3


docker-compose の場合

サービス定義ごとに logging で指定します。


docker-compose.yml

version: "3"

services:
hello:
image: "hello-world:latest"
logging:
driver: "json-file" # defaults if not specified
options:
max-size: "10m"
max-file: "3"

注意点として max-size, max-file は文字列型で記述しないとエラーになります。

max-sizeg, m, k 単位文字が使えるので自然と文字列型になると思いますが、 max-file: 3 などとうっかり書くと

ERROR: for SERVICE_NAME  Cannot create container for service web: json: cannot unmarshal number into Go value of type string

と怒られます。


参考リンク

Configure logging drivers - json-file | docs.docker.com


以上です。