banner
云野阁

云野阁

闲云野鹤,八方逍遥

dockerコンテナのログ設定管理

実行中のプロジェクトコンテナが突然停止し、コンテナログを確認するとディスクスペースが不足しており、コンテナが実行できなくなっていました。

Error response from daemon: Cannot restart container docker-p: mkdir /home/dockerData/overlay2/7bef1e2fa4788ab4d5db7e2e850d7ceeed09185b55c175f20c1500d28a0cc874d: デバイスに空き容量がありません

まずはdf -hを使ってディスクの使用状況を確認します。

overlay 413G 413G 0 100% /home/dockerData/overlay2/fea24dfbbe9f7d6d8309....../merged
overlay 413G 413G 0 100% /home/dockerData/overlay2/7bef1e2fa4788ab4d5db....../merged

コンテナのストレージディレクトリ/home/dockerData/(デフォルトのストレージディレクトリは/var/lib/dockerですが、こちらは再設定したものです)が直接ディスクを使い切ってしまいました。

原因がわかれば対処は簡単です。コンテナのストレージディレクトリ/home/dockerData/に移動し、du -shコマンドを使ってoverlay2containersの 2 つのディレクトリおよびその中のファイルを確認します。containersディレクトリ内のコンテナファイル98bbe7f17fa335f1b6e17......が 409G を占めていることがわかりました。

du -sh overlay2
3.7G overlay2

du -sh containers/98bbe7f17fa335f1b6e17......
409G containers/98bbe7f17fa335f1b6e17......

さらにコンテナファイルを深掘りすると、原因はコンテナのログファイル98bbe7f17fa335f1b6e17......-json.logにあることがわかりました。

このログファイルを削除した後、コンテナを再起動すると、業務が正常に戻りました。

このような事態が再発しないように、Docker デーモン/etc/docker/daemon.jsonにログ記録ドライバーを設定する必要があります。具体的な内容は以下の通りです:

  "log-driver":"json-file",
  "log-opts":{"max-size" :"50m","max-file":"2"}

"log-driver":"json-file" Docker のデフォルトのログ記録ドライバー。ログ形式は JSON です。

"max-size" :"50m" ログの切り替え前の最大サイズは 50M です。

"max-file":"2" 保持する最大ログファイル数は 2 です。

設定が完了したら、docker を再起動します。

sudo systemctl daemon-reload
sudo systemctl restart docker

docker のログに関する詳細な内容については、以下のリンクを参照してください。

https://segmentfault.com/a/1190000023144155

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。