Docker コンテナのログを表示およびクリーンアップする方法 (テスト済みで効果的)

Docker コンテナのログを表示およびクリーンアップする方法 (テスト済みで効果的)

1. 問題

Docker コンテナのログにより、ホストのディスク領域がいっぱいになりました。 docker logs -f container_name には大量のログがあり、多くのスペースを占有します。使用されていないログはクリーンアップできます。

2. 解決策

2.1 Dockerコンテナのログを見つける

Linux では、コンテナ ログは通常 /var/lib/docker/containers/container_id/ に保存されます。json.log で終わるファイル (ビジネス ログ) は非常に大きくなります。各ログ ファイルのサイズを確認するスクリプト docker_log_size.sh は次のとおりです。

#!/bin/sh

echo "======== docker コンテナ ログ ファイル サイズ ========" 

ログ = $(/var/lib/docker/containers/ -name *-json.log を検索) 

$logsにログイン 
    する 
       ls -lh $ログ  
    終わり 

# chmod +x docker_log_size.sh

# ./docker_log_size.sh

2.2 Dockerコンテナログのクリーンアップ(症状の対処)

Docker コンテナが実行中の場合、rm -rf を使用してログを削除した後、df -h によってディスク領域が解放されないことがわかります。その理由は、Linux または Unix システムでは、rm -rf またはファイル マネージャーを使用してファイルを削除すると、それらのファイルがファイル システムのディレクトリ構造からリンク解除されるためです。ファイルが開いている場合(プロセスによって使用中の場合)、プロセスは引き続きファイルを読み取ることができ、ディスク領域は引き続き占有されます。正しい方法は cat /dev/null > *-json.log です。もちろん、rm -rf で削除して docker を再起動することもできます。次に、ログクリーニング スクリプト clean_docker_log.sh を提供します。内容は次のとおりです。

#!/bin/sh 

echo "======== クリーンな docker コンテナ ログを開始します =========" 

ログ = $(/var/lib/docker/containers/ -name *-json.log を検索) 

$logsにログイン 
    する 
        echo "ログをクリーンアップ: $log" 
        cat /dev/null > $log 
    終わり 

echo "======== docker コンテナ ログのクリーンアップを終了 ========"
# chmod +x clean_docker_log.sh

# ./clean_docker_log.sh

しかし、このような清掃を行った後でも、コンテナの丸太は時間が経つと雑草のように再び生えてきます。

2.3 Dockerコンテナのログサイズの設定(根本原因)

  • コンテナサービスのログサイズの上限を設定する

上記の方法では、遅かれ早かれログファイルのサイズが増加します。問題を根本的に解決するには、コンテナ サービスのログ サイズの上限を制限する必要があります。これはコンテナdocker-composeのmax-sizeオプションを設定することで実現されます。

nginx: 
 イメージ: nginx:1.12.1 
 再起動: 常に 
 ログ記録: 
  ドライバー: "json-file" 
  オプション: 
   最大サイズ: "5g" 

nginx コンテナを再起動すると、ログ ファイルのサイズは 5 GB に制限されるため、これ以上心配する必要はありません。

  • グローバル設定

新しい /etc/docker/daemon.json を作成します。すでに存在する場合は、新しいものを作成する必要はありません。以下に示すように、log-dirver および log-opts パラメータを追加します。

# vim /etc/docker/daemon.json

{
 "レジストリミラー": ["http://f613ce8f.m.daocloud.io"],
 "ログ ドライバー":"json ファイル",
 「ログ オプション」: {「最大サイズ」:「500 m」、「最大ファイル」:「3」}
}

max-size=500m は、コンテナ ログ サイズの上限が 500M であることを意味します。

max-file=3 は、コンテナーに id+.json、id+1.json、id+2.json の 3 つのログがあることを意味します。

// Dockerデーモンを再起動します# systemctl daemon-reload

# systemctl dockerを再起動します

注意: 設定されたログ サイズは、新しく作成されたコンテナーに対してのみ有効です。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker クリーニングキラー/Docker オーバーレイ ファイルがディスク領域を大量に占有する
  • Docker によって生成されたジャンクファイルをクリーンアップする方法
  • Dockerリソースを素早くクリーンアップする方法
  • Docker ディスク領域の使用状況を分析してクリーンアップする方法
  • Docker クリーンアップ コマンド コレクション
  • Docker クリーニングの一般的な方法と問題点

<<:  vue3 のストアを使用してスクロール位置を記録する例

>>:  MySqlは、外部ネットワーク接続クライアントの低速問題を解決するためにskip-name-resolveを使用します。

推薦する

Mysqlアカウント管理の原理と実装方法の詳細な説明

この記事では、例を使用して、MySQL アカウント管理の原則と実装方法を説明します。ご参考までに、詳...

Alibaba Cloud Docker Yum ソースを使用した Docker 17.03.2 の CentOS7 オンラインインストールの詳細説明

参照ドキュメント公式 Docker インストール ドキュメント: https://docs.dock...

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント。ウェブサイトのアクセス速度...

HTMLテーブルタグの詳しい解説(初心者向け)

表> <TR> <TD> <TH> <キャプション&...

MySQL クエリ キャッシュとバッファ プール

1. キャッシュ - クエリキャッシュ次の図は、MySQL 公式サイトから提供されています: MyS...

MySQLの使い方の詳細な説明

目次1. はじめに2. 本文2.1 Where句の位置2.2 演算子2.3 NULL値1. はじめに...

MySQL 8.0.16 winx64 のインストールと設定方法のグラフィックチュートリアル (win10 の場合)

この記事では、MySQL 8.0.16 winx64のインストールと設定の具体的な方法を記載します。...

HTMLは入力完了を検出する機能を実装する

入力が進行中かどうかを検出するには、「onInput(event)」を使用しますコンテンツが変更され...

Linux で測位バックグラウンド サービスが時々クラッシュする問題の解決方法

問題の説明最近のバックグラウンドサービスでは、特定の命令の要求データをディスクに保存する新しい機能が...

Nginx インストール エラーの解決方法

1. nginx-1.8.1.tar.gzを解凍する2. fastdfs-nginx-module-...

MySQL ユーザー変数と set ステートメントの例の詳細な説明

目次1 ユーザー変数の概要2 ユーザー変数の定義3 ユーザー変数の使用3.1 セットを通した例3.2...

HTML は、Web ページの作成者が学習して習得しなければならないものです。

HTML を学ぶメリットは何ですか? 1: ウェブサイトやブログのウェブ構造を簡単に変更できます。...

一般的でない js 演算演算子の概要

目次2. カンマ演算子3. JavaScript Null 結合演算子 (??) 4. JavaSc...

HTML ファイルにフラッシュ ビデオ形式 (flv、swf) ファイルを埋め込む方法

Flash ファイル形式: .FLV および .SWFフラッシュ ビデオ形式には、.flv と .s...

入力選択スタイルを変更する CSS 疑似クラスのサンプルコード

注: この表はW3Schoolチュートリアルから引用したものです疑似要素の分類と機能: 入力選択スタ...