Dockerのログのクリア方法とローテーション設定について

どうも、TOMOZO(@TOMOZO)です。

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

「超簡単」仮想環境でWiki「GROWI」を導入する(Markdown対応)

2019.02.12

で書いたGROWIのdockerコンテナ(docker-compose)を例にしていますが必要に応じて置き換える。

スポンサーリンク

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

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

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

ログを手動で消去する

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

 
$ docker-compose ps
        Name                       Command               State           Ports
---------------------------------------------------------------------------------------
growi_app_1             /docker-entrypoint.sh dock ...   Up      0.0.0.0:3000->3000/tcp
growi_elasticsearch_1   /docker-entrypoint.sh sh - ...   Up      9200/tcp, 9300/tcp
growi_mongo_1           docker-entrypoint.sh mongod      Up      27017/tcp

ログを吐いてみる。

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

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

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

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

$ 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

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

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

$ docker-compose stop
$ systemctl restart docker
$ docker-compose start
注意
設定は新しく作成したコンテナから適用されます。 (構築済みのコンテナには反映されません)

ログの ローテート設定(docker runオプション)

docker runコマンドのオプションとして指定できる。
http://docs.docker.jp/engine/reference/logging/overview.html#json

--log-opt max-size=[0-9+][k|m|g]
--log-opt max-file=[0-9]
$ 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では

  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 ↑↑↑

と書くと設定される。

スポンサーリンク