Dockerのログメンテナンス

Dockerコンテナ内でサーバーを運用しているときにロギングについて困ったことがあったので備忘録を残しておく。

docker logsで大量のログが流れて最新になかなかたどり着かない

末端の指定行だけを表示するようにする。--tail=xxxで行数を指定する

> docker logs --tail=1000 {container-name}

ログを縮小する

ファイルを削除するのではなく、縮小。コンテナが稼働中の場合は、ファイルを削除するよりも良さそう。まずログがどこに出力されているのかを特定する。

> docker-compose ps
       Name                     Command               State           Ports
------------------------------------------------------------------------------------
appserv   docker-entrypoint.sh npm start   Up      0.0.0.0:8080->8080/tcp
mongo     docker-entrypoint.sh mongod      Up      27017/tcp

> docker inspect appserv | grep log
        "LogPath": "/var/lib/docker/containers/b52f039313dcfd43f41f87c16f32d72aa001e9b3b97f818e093f61af98b26113/b52f039313dcfd43f41f87c16f32d72aa001e9b3b97f818e093f61af98b26113-json.log",

ホスト上の上記の場所にログが出力されていることがわかる。管理者権限を使ってファイルサイズを減らす。

> sudo ls -l /var/lib/docker/containers/b52f039313dcfd43f41f87c16f32d72aa001e9b3b97f818e093f61af98b26113/b52f039313dcfd43f41f87c16f32d72aa001e9b3b97f818e093f61af98b26113-json.log

-rw-r----- 1 root root 120620456  5月 13 23:20 /var/lib/docker/containers/b52f039313dcfd43f41f87c16f32d72aa001e9b3b97f818e093f61af98b26113/b52f039313dcfd43f41f87c16f32d72aa001e9b3b97f818e093f61af98b26113-json.log

> sudo truncate -s 0 /var/lib/docker/containers/b52f039313dcfd43f41f87c16f32d72aa001e9b3b97f818e093f61af98b26113/b52f039313dcfd43f41f87c16f32d72aa001e9b3b97f818e093f61af98b26113-json.log