docker でコンテナを起動したとき、コマンドとして指定したプロセスが標準出力・標準エラー出力に吐いたログは docker logs ${コンテナID}
で閲覧できる。
自分で docker のサービスを運用するにあたって、**このログが溜まりつづけてホスト側のディスクを圧迫してしまうのではないか?**という懸念があったので、ログの保存場所やローテート方法を調べた。
ログの保存場所
そもそも docker にはこのログの保存の仕方をカスタマイズできる Logging Driver という仕組みがあるのだが、デフォルトでは json-file
というドライバーが利用されている。
$ docker info | grep Log
Logging Driver: json-file
ドライバーが json-file
の場合、docker inspect
コマンドでログの保存場所を調べることができる。(他のドライバーについては未確認。)
$ docker inspect 8f18b6bfb58a | grep 'LogPath'
"LogPath": "/var/lib/docker/containers/8f18b6bfb58aa60ea992374604532f75110dd07742cb511af516d72e63b44138/8f18b6bfb58aa60ea992374604532f75110dd07742cb511af516d72e63b44138-json.log",
$ cat /var/lib/docker/containers/8f18b6bfb58aa60ea992374604532f75110dd07742cb511af516d72e63b44138/8f18b6bfb58aa60ea992374604532f75110dd07742cb511af516d72e63b44138-json.log
## docker logs 8f18b6bfb58a したときと同じ出力が得られる
ログのローテート方法
上記のログはデフォルトではローテートされないので、docker run
するときのオプションでローテート設定を指定してやる必要がある。
--log-opt max-size=[0-9]+[kmg]
--log-opt max-file=[0-9]+
100MB ごとにローテートして 10 世代まで保存するならこんな感じで docker run
するとよい。
docker run -d --log-opt max-size=100m --log-opt max-file=10 my-docker-image
1 コンテナを延々と立ち上げっぱなしにするような用途で、標準出力・標準エラー出力に大量のログを出力しているとディスクを圧迫してしまう可能性があるので、設定しておいたほうがいいかも。