概要 Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker コンテナは docker0 ブリッジの助けを借りて直接通信できますが、これは問題ありません。ただし、異なるホスト上の Docker コンテナは、ホスト上のポートをマッピングすることによってのみ通信できます。この方法は不便な場合があり、要件を満たさないこともあります。したがって、異なる物理マシン上の Docker コンテナは、独自の IP アドレスを使用して直接通信する必要があります。さらに、異なる物理ホスト上で Docker コンテナを起動すると、必然的に Docker コンテナのホスト間通信の問題が発生します。この記事で試してみましょう。 スキーム原則の分析 コンテナの IP はルーティングに使用されるため、異なるホスト上のコンテナが同じ IP を使用することは避ける必要があります。このためには、異なるホストに異なるサブネットを割り当てる必要があります。そこで、2 つのコンテナ間の通信のためのルーティング ソリューションを構築します。 環境の紹介: ホスト1のIPアドレスは192.168.145.128です。 ホスト2のIPアドレスは192.168.145.129です。 ホスト 1 上の Docker コンテナに割り当てられたサブネット: 172.17.1.0/24 ホスト 2 上の Docker コンテナに割り当てられたサブネット: 172.17.2.0/24 この構成の後、2 つのホスト上の Docker コンテナは同じ IP アドレスを使用しないため、IP の競合が回避されます。 要約すると、2 つのコンテナー間のデータ パケット転送プロセスは次のようになります。 コンテナ 1 からコンテナ 2 に送信されたデータ パケットは、まずコンテナ 1 の「ゲートウェイ」docker0 に送信され、次にホスト 1 のルートを調べると、データ パケットをホスト 2 に送信する必要があることがわかります。データ パケットがホスト 2 に到着すると、ホスト 2 の docker0 に転送され、最後に docker0 によってコンテナ 2 に転送されます。逆の原理も同じなので、ここでは繰り返しません。 1. ホスト1とホスト2でそれぞれdocker0を設定します。 ホスト 1 の /etc/docker/daemon.json ファイルを編集し、次の内容を追加します: "bip" : "ip/netmask" { "bip", "172.17.1.252/24" } ホスト 2 の /etc/docker/daemon.json ファイルを編集し、次の内容を追加します: "bip" : "ip/netmask" { "bip", "172.17.2.252/24" } docker サービスを再起動します。変更した docker0 ネットワーク セグメントを有効にするために、ホスト 1 とホスト 2 の両方で次のコマンドを実行して docker サービスを再起動します。systemctl restart docker 2. ルーティングルールを追加する 次のようにホスト 1 にルーティング ルールを追加します。 ルート追加 -net 172.17.2.0 ネットマスク 255.255.255.0 GW 192.168.145.129 次のようにホスト 2 にルーティング ルールを追加します。 ルート追加 -net 172.17.1.0 ネットマスク 255.255.255.0 GW 192.168.145.128 3. iptablesルールを設定する ホスト 1 に次のルールを追加します。 iptables -t nat -F ポストルーティング iptables -t nat -A POSTROUTING -s 172.17.1.0/24 ! -d 172.17.0.0/16 -j マスカレード ホスト 2 に次のルールを追加します。 iptables -t nat -F ポストルーティング iptables -t nat -A POSTROUTING -s 172.17.2.0/24 ! -d 172.17.0.0/16 -j マスカレード 4. コンテナを起動する ホスト 1 で Centos コンテナを起動します。 docker run -it --name コンテナ1 centos /bin/bash ホスト 2 で Centos コンテナを起動します。 docker run -it --name コンテナ2 centos /bin/bash これで、2 つのコンテナが相互に ping できるようになりました。 5. ルートの永続性(ホストの再起動時にルートが失われるのを防ぐため) root@rancher:~# vi /etc/rc.local ルーティング情報を追加します。終了する前に必ず書き込んでください。 ! ! : ルート追加 -net 172.17.2.0 ネットマスク 255.255.255.0 GW 192.168.102.88 以上がDockerコンテナのホスト間通信に関する知識のすべてです。123WORDPRESS.COMをご活用いただき、ありがとうございます。 以下もご興味があるかもしれません:
|
<<: Vue-Routerのインストールと使用方法の詳細な説明
2時間近くかけて、さまざまな方法を試しました。後で、whereでフィルタリングした後のデータ量が1ペ...
CSS ウェブページレイアウトを行う場合、XHTML1.0 仕様に準拠する必要があることは誰もが知っ...
1. W3C バージョンの flex 2009年版フラグ: display: box; または bo...
この記事では、次のように、誰にでも共有できる左右幅固定のミドルアダプティブ HTML レイアウトソリ...
背景: 一部の実験はサーバー上で完了する必要があります。したがって、リモート サーバー上のコードをロ...
よく使用されるコマンドは次のとおりです。 chmod 777 文件或目錄例: chmod 777 /...
目次0x0 はじめに0x1 RBAC 実装0x2 クレームベースの承認0x3 統合 CASL 0x4...
React は Vue とは異なります。ルートにメタ文字を設定することでルートインターセプションを実...
MySQLへのリモートアクセスを有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...
目次1. Nginxは負荷分散の原則を実装する2. Nginxの動的および静的分離の原則Nginx ...
Nginx をインストールして試してみましょう。画像はクラスであり、コンテナはオブジェクトであること...
目次1. マクロの観点からMySQLを分析する2. SQL ステートメントを実行するには、どの程度の...
最近、「フロントエンドキャッシュ」という新しい要件が作成されました要件背景: フォームへの高頻度の繰...
目次序文主な実装コードHTMLコードJSコード序文南の友達の多くは、雪をほとんど見たことがない、ある...
MySQLのスイッチングデータ保存ディレクトリの実装方法今日、仕事中に、mysql が保存されている...