1. ホーム
  2. docker

[解決済み] Docker:Dockerコンテナのログを適切にクリアする方法は?

2022-03-15 08:15:11

質問

私が使っているのは docker logs [container-name] を使用すると、特定のコンテナのログを見ることができます。

これらのログをクリアするエレガントな方法はありますか?

解決方法は?

まず、悪い答えです。から この質問 を実行するワンライナーがあります。

echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)

echoの代わりに、よりシンプルなものがあります。

: > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)

または、truncate コマンドがあります。

truncate -s 0 $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)


Dockerのファイルを直接修正するものなので、どちらもあまり好きではありません。外部ログの削除は、docker が json フォーマットのデータをファイルに書き込んでいる間に起こる可能性があり、その結果、部分行が発生し docker logs クリを使用します。そのようなことが起こる例として、次のようなものがあります。 duketwoさんの回答に対するこのコメント :

<ブロッククオート

ログファイルを空にした後、このエラーが表示されます。 error from daemon in stream: Error grabbing logs: invalid character '\x00' looking for beginning of value

その代わりに、Dockerに自動的にログをローテートさせることができます。これは、もしあなたがデフォルトの JSONロギングドライバ :

dockerd ... --log-opt max-size=10m --log-opt max-file=3

の一部として設定することもできます。 デーモン.json ファイルを使用することで、起動スクリプトを変更することなく使用できます。

{
  "log-driver": "json-file",
  "log-opts": {"max-size": "10m", "max-file": "3"}
}

これらのオプションは、root権限で設定する必要があります。必ず systemctl reload docker このファイルを変更した後、設定を適用させることができます。この設定は、新しく作成されたコンテナのデフォルトとなります。既存のコンテナを削除して、新しいログ制限を受信するために再作成する必要があることに注意してください。


同様のログオプションを個々のコンテナに渡すことで、これらのデフォルトを上書きし、個々のコンテナでより多くの、またはより少ないログを保存できるようにすることができます。以下から docker run はこのようになります。

docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 ...

またはコンポジットファイルで

version: '3.7'
services:
  app:
    image: ...
    logging:
      options:
        max-size: "10m"
        max-file: "3"


さらに容量を節約するために、jsonログドライバから"local"ログドライバに変更することができます。これは同じ max-size と max-file オプションを取りますが、json で保存する代わりに、より高速で小さいバイナリシンタックスを使用します。これにより、同じサイズのファイルに、より多くのログを保存することができます。そのためのdaemon.jsonのエントリーは以下のようなものです。

{
  "log-driver": "local",
  "log-opts": {"max-size": "10m", "max-file": "3"}
}

ローカルドライバの欠点は、jsonログへの直接アクセスに依存していた外部ログパーサ/フォワーダが動作しなくなることです。そのため、Elasticに送信するためにfilebeatのようなツールや、Splunkのユニバーサルフォワーダを使用する場合は、"local"ドライバを避けることをお勧めします。

これについては、私の ヒントと秘訣のプレゼンテーション .