Dockerコンテナのディスクがいっぱいになった場合の状況のまとめ

Dockerコンテナのディスクがいっぱいになった場合の状況のまとめ

序文

この記事では、最近私が遭遇した 2 つの状況について説明します。今後、新たな発見があれば追加していきます。

参照ドキュメント: https://docs.docker.com/engine/reference/commandline/dockerd/

アプリケーションログが多すぎる

デフォルトでは、各 Docker コンテナには 10G のストレージ スペースがあります。このサイズを超えると、コンテナに問題が発生します。

デフォルトのコンテナ サイズを変更するには、dm.basesize パラメータの公式ドキュメントを参照してください。

ベースデバイスの作成時に使用するサイズを指定します。これにより、イメージとコンテナーのサイズが制限されます。デフォルト値は 10G です。シン デバイスは本質的に「スパース」であるため、ほとんど空の 10G デバイスはプール上の 10 GB のスペースを使用しないことに注意してください。ただし、デバイスが大きくなるほど、ファイル システムは空のボックスに使用するスペースが多くなります。

デーモンの再起動時にベース デバイス サイズを増やすことができます。これにより、将来のすべてのイメージとコンテナー (新しいイメージに基づく) に新しいベース デバイス サイズが使用されるようになります。

$ sudo dockerd --storage-opt dm.basesize=50G

これにより、基本デバイスのサイズが 50G に増加します。既存のベースデバイスのサイズが 50G より大きい場合、Docker デーモンはエラーをスローします。このオプションを使用すると、ユーザーは基本デバイスのサイズを拡大できますが、縮小することはできません。

この値は、プルされたイメージによって初期化され継承されている可能性のある、システム全体の「ベース」の空のファイルシステムに影響します。通常、この値を変更するには追加の手順が必要です。

$ sudo サービス docker を停止

$ sudo rm -rf /var/lib/docker

$ sudo サービス docker を開始

ここで遭遇した問題は、特定のモジュールが 10 分以内に 1G のログを出力することでした。この問題は、ログ ポリシーを変更することで解決できました。

Dockerd ログが多すぎる

GitLab の docker サービスがあります。数か月実行すると、プッシュとプルができなくなります。原因は、/var/lib/docker のディスク容量がいっぱいになっているためです。ディスク容量がいっぱいになる理由は、dockerd ログが 10 GB を超える容量を占有しているためです。

ログファイルのパスは次のとおりです: /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log

参考: https://stackoverflow.com/questions/31829587/docker-container-logs-taking-all-my-disk-space

以下の解決策を参照してください。

1. コンテナパラメータの開始

参考: https://docs.docker.com/engine/reference/commandline/run/

ログ記録ポリシーを構成するには、--log-opt ログ ドライバー オプションを使用します。

たとえば、--log-opt max-size=50m です。

2. グローバルデフォルト設定

daemon.json で設定され、Linux でのデフォルトの場所は /etc/docker です。

設定例:

{
 "ログドライバー": "json ファイル",
 「ログオプション」: {
  "最大サイズ": "10m",
  "最大ファイル": "3",
  "ラベル": "production_status",
  "env": "os,顧客"
 }
}

ログ構成リファレンス: https://docs.docker.com/config/containers/logging/configure/

daemon.json の完全な例については、https://docs.docker.com/engine/reference/commandline/dockerd/ を参照してください。

{
 "認証プラグイン": [],
 "データルート": "",
 "DNS": [],
 "DNSオプション": [],
 "DNS検索": [],
 "実行オプション": [],
 "exec-root": "",
 「実験的」:偽、
 "特徴": {}、
 "ストレージ ドライバー": "",
 "ストレージオプション": [],
 "ラベル": [],
 「ライブリストア」:true、
 "ログドライバー": "json ファイル",
 「ログオプション」: {
 "最大サイズ": "10m",
 "最大ファイル":"5",
 "ラベル": "somelabel",
 "env": "os,顧客"
 },
 "mtu": 0,
 "pidファイル": "",
 "クラスターストア": "",
 「クラスターストアオプション」: {},
 "クラスター広告": "",
 「最大同時ダウンロード数」: 3,
 「最大同時アップロード数」: 5,
 "デフォルトのshmサイズ": "64M",
 「シャットダウンタイムアウト」: 15,
 「デバッグ」:true、
 "ホスト": [],
 "ログレベル": "",
 "tls": 真、
 "tlsverify": 真、
 "tlscacert": "",
 "tlscert": "",
 "tlskey": "",
 "swarm-default-advertise-addr": "",
 "api-cors-ヘッダー": "",
 "selinux-enabled": false、
 "userns-remap": "",
 "グループ": ""、
 "cgroup-親": "",
 「デフォルトのulimits」: {
 "ファイルなし": {
  "名前": "nofile",
  「ハード」: 64000,
  「ソフト」:64000
 }
 },
 「初期化」: 偽、
 "init-path": "/usr/libexec/docker-init",
 "ipv6": 偽、
 「iptables」: 偽、
 「IP転送」: false、
 「ip-masq」: 偽、
 「ユーザーランドプロキシ」:false、
 "ユーザーランドプロキシパス": "/usr/libexec/docker-proxy",
 "ip": "0.0.0.0",
 "橋": ""、
 "ビップ": "",
 "固定CIDR": "",
 "固定cidr-v6": "",
 "デフォルトゲートウェイ": "",
 "デフォルトゲートウェイv6": "",
 "icc": 偽、
 「生ログ」:false、
 「非配布可能アーティファクトを許可する」: [],
 "レジストリミラー": [],
 "seccomp-プロファイル": "",
 "安全でないレジストリ": [],
 「新しい権限なし」: false、
 "デフォルトランタイム": "runc",
 「oom-スコア調整」: -500,
 "ノード汎用リソース": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],
 「ランタイム」: {
 "cc-ランタイム": {
  "パス": "/usr/bin/cc-runtime"
 },
 "カスタム": {
  "パス": "/usr/local/bin/my-runc-replacement",
  "ランタイム引数": [
  " - デバッグ"
  ]
 }
 },
 "デフォルトアドレスプール":[{"ベース":"172.80.0.0/16","サイズ":24},
 {"ベース":"172.90.0.0/16","サイズ":24}]
}

パラメータを設定したら、Docker サービスを再起動する必要があります。

docker-compose の設定

参考: https://docs.docker.com/compose/compose-file/compose-file-v2/

設定例:

ログ記録:
 オプション:
  最大サイズ: '12m'
  最大ファイル数: '5'
 ドライバー:json ファイル

補充する

私はこれを急いで書きました。私が投稿したリンクには非常に完全な情報が含まれており、この種の問題を解決できるはずです。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • Dockerがディスク容量を全て占有する問題の解決策
  • Dockerデータファイルが大きすぎてルートディスクがいっぱいになる問題を解決します
  • Docker ディスク領域の使用状況を分析してクリーンアップする方法
  • Docker ログが多すぎてディスクがいっぱいになる場合の対処方法

<<:  MySQL 8.0.11 圧縮バージョンを Windows 10 にインストールするための詳細なチュートリアル

>>:  Jenkins を使用した Vue プロジェクトのワンクリック パッケージングと公開の実装

推薦する

MySQL の問題を解決する: MSVCR120.dll が見つからないため、コードの実行を続行できません

1. 問題MySQL の初期化時に発生する問題は、次のとおりです。 1. 「MSVCR120.dll...

MySQLインデックスを正しく作成する方法

インデックス作成は大学図書館の書誌インデックスの構築に似ており、データ検索の効率を向上させ、データベ...

Mac OS10.12 に mysql5.7.18 をインストールするチュートリアル

ウェブ全体を検索して、さまざまな落とし穴を見つけましたが、問題は解決しませんでした。ついに自分でも分...

HTML コード内のスペースと空白行についての簡単な説明

HTML コード内の連続するスペースまたは空白行 (改行) はすべて 1 つのスペースとして表示され...

Sublime / vscode による HTML コード生成の迅速な実装

目次基本的なHTML構造div とクラス名のショートカット キーを生成するクラス名を持つdiv ID...

Linux でログインタイムアウト後に非アクティブなユーザーを自動的にログアウトする

方法1: .bashrcまたは.bash_profileファイルを変更するこれは、ホーム ディレクト...

Vue3は現在のルーティングアドレスを取得します

正解useRouterの使用: // ルーターパス: "/user/:uid" ...

Vueのメソッドとプロパティの詳細な説明

Vueのメソッドとプロパティ1. 方法使用法 1メソッド: {メソッド名: function(){}...

Win10 に Tomcat サーバーをインストールし、環境変数を構成する詳細なチュートリアル (画像とテキスト)

目次JDKをダウンロードしてインストールするTomcat 圧縮パッケージをダウンロードTomcatの...

MySQL 内部結合の使用例 (必読)

文法規則 列名を選択 テーブル名1から INNER JOIN テーブル名2 ON テーブル名1.列名...

JavaScript でアルゴリズムの複雑さを学ぶ方法

目次概要Big O 表記法とは何ですか?オー(1)の上) (n^2) O(logn) ですの上!)結...

Javascript で関数のカリー化とデカリー化を実装する方法

関数のカリー化(黒い疑問符の顔)? ? ?カレー(黒い疑問符の顔)? ? ?これは完璧な中国語翻訳で...

JavaScript の条件付きアクセス属性と矢印関数の紹介

目次1. 条件付きアクセス属性2. アロー関数の紹介1. 条件付きアクセス属性?. は ES2020...

MySQLのファジークエリの要約

1. 一般的な使用法: (1)%で使用する% は 1 つ以上の文字のワイルドカードを表します。たとえ...

Docker.v19 で Docker Compose オーケストレーション ツールをインストールして構成する方法

1. Compose の紹介Compose は、マルチコンテナ Docker アプリケーションを定義...