[解決済み] Docker:Dockerコンテナのログを適切にクリアする方法は?
質問
私が使っているのは
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"ドライバを避けることをお勧めします。
これについては、私の ヒントと秘訣のプレゼンテーション .
関連
-
docker-composeコンテナのマウント権限の問題
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerコンテナのシェルに入るにはどうしたらいいですか?
-
[解決済み] 古いDockerコンテナを削除する方法
-
[解決済み] Dockerでデータベースなどの永続的なストレージを扱う方法
-
[解決済み】Dockerは仮想マシンとどう違うの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】apt-get でインストールしても docker コマンドが見つからない。
-
[解決済み] docker: ドライバがエンドポイントウェブサーバの外部接続のプログラミングに失敗しました。
-
[解決済み] ドッカーイメージのアイコンを作成する
-
[解決済み] docker ERROR: 不明なブロブ
-
[解決済み] docker terminal: IP待ち
-
Http: サーバーが HTTPS クライアントに HTTP 応答を返した 解決策
-
net/http: 接続待ちの間にリクエストがキャンセルされた (Client.Timeout exceeded while awaiting head)
-
kubernetesの後に参加した作業ノードが "NotReady "状態である。
-
docker base container in bash: sudo: command not found 問題が解決されました。
-
[解決済み】docker/overlay2/のクリーニングは安全か?