Dockerは同じIPネットワークセグメントとの接続を実現する

Dockerは同じIPネットワークセグメントとの接続を実現する

最近、Docker とホストが同じネットワーク セグメント上で通信する問題を解決し、そのプロセス全体を記録するためにこの記事を書きました。

例えば

ホストAとホストBはネットワークで接続されています。ホストAには複数のコンテナを作成してクラスターを形成していますが、ホストBを介してホストAのコンテナにアクセスしたいと考えています。もちろん、ポートマッピングは非常に便利とも言えるでしょう。さらにポートが必要な場合や、一時的にポートを追加する必要がある場合は、設定が面倒になることがあります。では、ホストAのコンテナのIPとホストのIPを同じネットワークに置けば、それらを直接相互接続することはできないのでしょうか?

1. Docker(Linuxサーバー)をインストールする

Dockerをインストールする

yumでdockerをインストール

2. パイプワークを使用してDockerコンテナに独立したIPを設定する

パイプワーク ツールをインストールした後、1 つのコマンドを使用してコンテナーの IP アドレスを変更したり、より正確には、コンテナーの IP アドレスに新しいネットワーク カードを追加したりできます。

https://github.com/jpetazzo/pipework/archive/master.zip を取得します。
マスター.zip を解凍します。 
cp パイプワークマスター/パイプワーク /usr/local/bin/
chmod +x /usr/local/bin/パイプワーク

3. IP設定ファイルeh0を編集する

デフォルトの IP 構成ファイル、eth0 または ens33 を編集します (オペレーティング システムによって名前が異なります。たとえば、私が操作しているマシンの名前は ifcfg-ens33 です)
vim /etc/sysconfig/ネットワークスクリプト/ifcfg-ens33

iと入力して編集モードに入り、次の内容をファイルにコピーします。

タイプ=イーサネット
PROXY_METHOD=なし
BROWSER_ONLY=いいえ
ブートプロトコル=dhcp
DEFROUTE=はい
IPV4_FAILURE_FATAL=いいえ
IPV6INIT=はい
IPV6_AUTOCONF=はい
IPV6_DEFROUTE=はい
IPV6_FAILURE_FATAL=いいえ
IPV6_ADDR_GEN_MODE=安定したプライバシー
名前=ens33
36b40bc6-6775-4e02-8161-e245d0e3892f の翻訳です。
デバイス=ens33
#以下はブリッジ部分のONBOOT=yesの設定です
ブリッジ=br0
ピアDNS=はい
ピアルート=はい
IPV6_PEERDNS=はい
IPV6_PEERROUTES=はい

4. カスタムブリッジを作成する br0

vim の ifcfg-br0

設定内容を設定ファイルにコピーします

 デバイス=br0
 BOOTPROTO=静的
 NM_CINTROLLER=いいえ
 ONBOOT=はい
 TYPE=ブリッジ
 IPアドレス=192.168.186.128
 ネットマスク=255.255.255.0

仮想マシンネットワークサービスを再起動します

systemctl ネットワークを再起動

5. docker設定ファイルを修正し、ブリッジを指定する

docker設定ファイル/etc/sysconfig/を変更する

: : vim /etc/sysconfig/docker を実行する

変更点は以下のとおりです

オプション = '--selinux-enabled --log-driver=journald --signature-verification=false'

変更後:

オプション='--selinux-enabled -b=br0'

変更後:

# /etc/sysconfig/docker

# dockerデーモンの実行方法を変更したい場合は、これらのオプションを変更します
#OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
オプション='--selinux-enabled -b=br0'
[ -z "${DOCKER_CERT_PATH}" ] の場合;
  DOCKER_CERT_PATH = /etc/docker
フィ

# このファイルにレジストリを追加しないでください。/etc/containers/registries.conf を使用してください。
# の代わりに使用してください。詳細については、registries.conf(5) のマニュアル ページを参照してください。

# 一時ファイル(作成されたファイルなど)の場所
# docker のロードおよびビルド操作。デフォルトは /var/lib/docker/tmp です
# 次の環境変数を設定することで上書きできます。
# DOCKER_TMPDIR=/var/tmp

# /etc/cron.daily/docker-logrotate cron ジョブのステータスを制御します。
# 無効にするには、以下の行のコメントを解除します。
#LOGROTATE=偽

# docker-latest デーモンは、docker-latest ユニットファイルを起動することで使用できます。
# docker-latestクライアントを使用するには、以下の行のコメントを解除します
#DOCKERBINARY=/usr/bin/docker-latest
#DOCKERDBINARY=/usr/bin/dockerd-latest
#DOCKER_CONTAINERD_BINARY=/usr/bin/docker-containerd-latest
#DOCKER_CONTAINERD_SHIM_BINARY=/usr/bin/docker-containerd-shim-latest
その他の引数='-b br0'

5. Dockerサービスを再起動する

systemctl dockerを再起動します

6. Dockerコンテナインスタンスを作成する

docker run -itd --name test1 --net=none centos /bin/bash

--net=none は、コンテナのネットワークカードがすべて空であり、パイプワークを通じてカスタマイズする必要があることを意味します。

7. ネットワークカードを指定する

配管 br0 テスト1 192.168.186.111/[email protected]

8. コンテナに入り、ホスト マシンと同じネットワーク セグメント内の IP アドレスに ping を実行して、正常に ping できるかどうかを確認します。

# コンテナに入る docker attach test1
# ホストにping 192.168.186.22

8.1 同じネットワークセグメント内のホストIPを変更する

ホスト IP を変更し、ネットワーク セグメントをホスト A ブリッジ IP セグメントと一致させます。設定後、ホスト A と B は相互に ping を実行できるようになります。

# 同じネットワークセグメントのIPをpingする
192.168.186.33にpingする

この時点で、Docker ネットワーク間の通信が完了します。

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

以下もご興味があるかもしれません:
  • Dockerのデフォルトネットワークセグメントの正しい変更手順
  • Docker で Docker0 ブリッジのデフォルトのネットワーク セグメントを変更する方法
  • Dockerコンテナのホスト間マルチネットワークセグメント通信ソリューションの詳細説明
  • Docker は、ホストと同じネットワーク セグメントにある IP アドレスを指定します。
  • Docker はホスト ネットワーク セグメント IP をどのように割り当てますか?
  • Dockerコンテナはカスタムネットワークセグメントで固定IP/静的IPアドレスを指定します
  • Dockerのデフォルトネットワークセグメントを変更する実装方法の分析

<<:  js を使用して QR コードを生成するサンプル コード

>>:  MySQL での coalesce() の使用に関するヒントのまとめ

推薦する

MySQLインデックスが失敗するいくつかの状況の分析

1. 最左プレフィックス原則 - 複数の列にインデックスが付けられている場合は、最左プレフィックス原...

mysql 簡単な操作例を表示

この記事では、例を挙げて mysql show 操作について説明します。ご参考までに、詳細は以下の通...

最新のmysql-5.7.21のインストールと設定方法

1. ダウンロードしたMySQLの圧縮パッケージをインストールディレクトリに解凍します。 2. 新し...

HTML に FLASH へのリンクを追加し、すべての主要ブラウザと互換性を持たせる方法

まずコードを見てみましょうコードをコピーコードは次のとおりです。 <div style=&qu...

MySQLスケーラブル設計の基本原則

目次序文1. スケーラビリティとは何ですか?スケールアウトの利点:スケールアウトのデメリット:スケー...

Docker、プレーヤー機能を備えたCMSオンデマンドシステムを構築

目次文章1. 機械を準備する2. Dockerをインストールする1. 依存パッケージをインストールす...

Vueはカウントダウン機能を実装する

この記事の例では、カウントダウン機能を実装するためのVueの具体的なコードを参考までに共有しています...

Linux の特別な権限 SUID、SGID、SBIT の詳細な説明

序文Linux のファイルまたはディレクトリの権限については、通常の rwx 権限についてすべて知っ...

上部の固定divは半透明効果に設定できます

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

div 内の img と span の垂直方向の中央揃えの問題について

以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピー<htm...

MySQLデータのバックアップ方法の選択と考え方

目次1. rsync、cpでファイルをコピーする2. xxxをoutfile構文に選択する3. 遅延...

TypeScript 開発のための 6 つの実用的なヒント

目次1. 開発前にエンティティの種類を決定する2. インターフェースをリクエストするときは、使用する...

WeChatアプレットキャンバスが署名機能を実装

WeChatアプレットプロジェクトでは、開発モジュールに手書き署名機能が含まれ、WeChatアプレッ...

10 HTML テーブル関連タグ

実際、多くの人が「テーブルは絶対に使用すべきではないと聞いたことがある」と言いますが、これは絶対に間...