iptables の再起動後に Docker の iptables ルールの完全なプロセスが失われる

iptables の再起動後に Docker の iptables ルールの完全なプロセスが失われる

原因と結果

1. ansibleコマンドを使用してジャンプサーバー上のマシンBをテストすると、次のエラーが報告されるため、ネットワークファイアウォールに問題があると思われます。

10.10.0.86 | 失敗 >> {
 「失敗」:true、 
 "msg": "/bin/sh: /usr/bin/python: そのようなファイルまたはディレクトリはありません\r\nOpenSSH_7.6p1 Ubuntu-4ubuntu0.3、OpenSSL 1.0.2n 2017 年 12 月 7 日\r\ndebug1: 構成データ /etc/ssh/ssh_config を読み込んでいます\r\ndebug1: /etc/ssh/ssh_config 行 19: * のオプションを適用しています\r\ndebug1: auto-mux: 既存のマスターを試行しています\r\ndebug1: mux_client_request_session: マスター セッション ID: 2\r\n10.10.0.86 への共有接続が閉じられました。\r\n", 
 「解析済み」: false
}

2. マシンBにログインします。これはDockerコンテナを実行しているオンラインマシンです。私の経験では、ネットワークファイアウォールに問題がある場合は、

iptables -F
systemctl iptablesを停止する 
systemctl 停止 ファイアウォール

3. それでコンテナに影響はないだろうと思い、コンテナのログを見てみた。予想外に10個以上エラーが報告されていて、すべて接続できない状態だった。ちょっと慌てた…コンテナを再起動したが、全然起動しなかった。エラーは以下の通りだった

docker: デーモンからのエラー応答: ドライバーはエンドポイント happy_ptolemy での外部接続のプログラミングに失敗しました (9cedc114be35eb86cd6f7f7bb4f11f93b5f8d2c0745afc72664cef8e96aad439): iptables が失敗しました: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 10.10.0.86 --dport 3000 -j ACCEPT: iptables: その名前のチェーン/ターゲット/一致はありません。

(終了ステータス 1)。

4. 解決策: dockerを再起動する

systemctl dockerを再起動します

知識ポイント

1. netfilterとiptablesの関係

Netfilter は、ネットワーク パケットを管理するために使用される Linux カーネルのファイアウォール フレームワークです。ネットワーク アドレス変換 (NAT) の機能だけでなく、パケット コンテンツの変更やパケット フィルタリングなどのファイアウォール機能も備えています。 Netfilter を制御するには、ユーザー空間でアプリケーション ソフトウェア iptables を使用します (iptables は単なるアプリケーション ソフトウェア、ツールです)。

2. iptablesとfirewalldの関係

Firewalld は iptables と同様にアプリケーション ソフトウェアでありツールですが、その基礎となるレイヤーはやはり最初に iptables を通過します。

3. docker、firewalld、iptablesの関係

1) docker がインストールされると、iptables または firewalld が自動的に引き継がれます。docker が実行されると、iptables にルールが自動的に追加されます。そのため、iptables を再起動すると、iptables は失われ、docker を再起動することによってのみ修正できます。

2) Systemd を使用する場合、firewalld は Docker の前に起動しますが、Docker の起動後に firewalld を起動または再起動する場合は、Docker プロセスを再起動する必要があります。

要約する

1. 生産環境への敬意

2. 知識ポイントを十分に理解していないため、どのシナリオが使用可能で、どのシナリオが使用できないかがわからない

3. その後、ファイアウォールのルールをさらに理解する必要があります

これで、iptables の再起動後に Docker の iptables ルールが失われるというこの記事は終わりです。再起動後に Docker の iptables ルールが失われるという詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker コンテナで iptables を使用するときに最小限の権限を有効にする方法
  • Linux iptables とインターフェースを使用してコンテナ ネットワークを管理する Docker の詳細な説明

<<:  Vueは小さな天気予報アプリケーションを実装します

>>:  MySQL の悲観的ロックと楽観的ロックの理解と応用分析

推薦する

このようなシェル スクリプトを使用して、多数の MySQL データベースを強制終了します (推奨)

朝早くに電話で起こされました。あるプロジェクトのデータベースがダウンしていて起動できないとのことでし...

nginx 503 サービスが一時的に利用できない問題を解決する方法

最近、ウェブサイトを更新すると、503 Service Temporarily Unavailabl...

MySQL データベース インデックスが B+ ツリーの使用を選択するのはなぜですか?

MySQL データベース インデックスが B+ ツリーを使用する理由をさらに分析する前に、データ構...

JavaScript でオブジェクトをトラバースする 5 つの方法 サンプルコード

目次準備する5つの武器…のためにオブジェクト.キーオブジェクト.getOwnPropertyName...

Node.js における path.join() の利点の分析

文字列連結ではなく path.join() メソッドを使用する必要があるのはなぜか疑問に思うかもしれ...

Vue は Websocket カスタマー サービス チャット機能を実装します

この記事では主に基本的なチャットの実装方法を紹介します。今後は絵文字や写真のアップロードなどの機能も...

HTML テーブルの行間隔を変更する方法の例

HTML テーブルを使用する場合、行間隔を変更する必要がある場合がありますが、余白、パディング、折り...

Reactコンポーネントをフルスクリーンにする方法

導入この記事は、 React + antdをベースにして、完全な全屏demoを紹介します。その理由は...

CentOS に Docker をインストールし、Springboot で Docker をリモート公開する方法

目次1. CentOS7.0へのJDK1.8のインストール2. Dockerのインストール3.Doc...

sqlite3 から mysql に移行するときに起こりうる問題のコレクション

簡単な説明適切な読者: モバイル開発sqlite3 データを mysql に移行する場合、多くの構文...

JavaScript 基礎シリーズ: 関数とメソッド

目次1. 関数とメソッドの違い2. 良い関数の書き方2.1 正確な命名2.1.1 関数の命名2.1....

MySQL 5.7 および 8.0 データベースのルート パスワードを忘れた場合の解決策

注: MySQL5.7 で root パスワードをクラックするには、パスワード認証をスキップしてデー...

Vue3 のリアクティブ関数 toRef 関数 ref 関数の紹介

目次リアクティブ機能使用法: toRef 関数 (理解するだけ)使用法: ref関数レスポンシブデー...

Mysql SQL ステートメント演習 (50 問)

テーブル名とフィールド–1. 学生リスト学生 (s_id、s_name、s_birth、s_sex)...

MySQL 接続とコレクションの簡単な分析

結合クエリ結合クエリとは、2 つ以上のテーブル間のマッチング クエリを指し、一般的には水平操作と呼ば...