JavaScriptを有効にしてください

Dockerコンテナのログのクリア方法とローテーション設定

 ·  ☕ 2 分で読めます

dockerで起動しっぱなしのコンテナのログがディスクを圧迫していたので、ログを消去する方法と、ついでにログのローテーション設定を行った。
docker-composeでも同じ。

ログのクリア方法

まずは手動でログをクリアする方法から。

デフォルトのロギングドライバは「json-file」

1
2
$ docker info | grep Logging
Logging Driver: json-file

json-fileはコンテナの標準出力と標準エラーを/var/lib/docker/containers/[container-id]/[container-id]-json.log(環境に依存するかも)に出力するため起動しっぱなしだとディスクを圧迫する。

ログを手動で消去する

まず起動しているコンテナの一覧を表示する。

1
2
3
4
5
$ docker-compose ps
       Name                       Command               State           Ports
---------------------------------------------------------------------------------------
XXXX_app_1             /docker-entrypoint.sh dock ...   Up      0.0.0.0:3000->3000/tcp

ログを吐いてみる。

$ docker logs XXXX_app_1
#大量のログが・・

コンテナのログの保存場所を調べる。

1
2
3
$ docker inspect XXXX_app_1 | grep -i log
"LogPath": "/var/lib/docker/containers/bef1e7aa9c237a34a9ea08dfd5253c3621915bed2cfd65f7985580998607beb1/bef1e7aa9c237a34a9ea08dfd5253c3621915bed2cfd65f7985580998607beb1-json.log",
"LogConfig": {

(消去して問題ないかを確認した上で)ログを消去する。
root権限が必要かも。

1
$ truncate -s 0 /var/lib/docker/containers/bef1e7aa9c237a34a9ea08dfd5253c3621915bed2cfd65f7985580998607beb1/bef1e7aa9c237a34a9ea08dfd5253c3621915bed2cfd65f7985580998607beb1-json.log

というか、docker logs cleanてきなコマンドはないのかね。

ログのローテート設定

次にローテーションさせる。

グローバル設定で行う場合

dockerデーモンの設定ファイル/etc/docker/daemon.json(デフォルトの場所)にロギングドライバのオプションを書く。ファイルが無い場合は新規作成する。

http://docs.docker.jp/engine/reference/commandline/dockerd.html#daemon-configuration-file

1
2
3
4
5
$ cat /etc/docker/daemon.json
{
   "log-driver": "json-file",
   "log-opts": {"max-size": "10m", "max-file": "3"}
}

dockerデーモンを再起動する。

1
2
3
$ docker-compose stop
$ systemctl restart docker
$ docker-compose start

設定は新しく作成したコンテナから適用される。 (構築済みのコンテナには反映されません)

docker run オプションで行う場合

docker runコマンドのオプションとして指定できる。

http://docs.docker.jp/engine/reference/logging/overview.html#json

1
2
--log-opt max-size=[0-9+][k|m|g]
--log-opt max-file=[0-9]
1
2
$ docker run -d --log-opt max-size=1k --log-opt max-file=10
$ docker start --log-opt max-size=100m --log-opt max-file=10

docker-compose.yml で設定する場合

docker-composeでは

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
  mongo:
   image: mongo:3.4
   volumes:
     - mongo_configdb:/data/configdb
     - mongo_db:/data/db
# add ↓↓↓
   logging:
     driver: "json-file" # defaults if not specified
     options:
       max-size: "10m"
       max-file: "3"
# add ↑↑↑

と書くと設定される。

構築済みのコンテナの場合は、docker-compose upでコンテナの再構築が必要。

共有

tommy
著者
tommy
Software engineer⭐LPIC-3(304)⭐