Dockerコンテナーをホストと内部の両方のブリッジネットワークに接続する


14

プライベート(--internal)Dockerネットワークと事前定義hostネットワークの間のルーターとしてDockerコンテナーを実行しようとしています。つまり、コンテナには2つのネットワークインターフェースが必要です。1つは「外部」インターフェースであり、すべてのホストIPアドレスにアクセスでき、もう1つは「内部」インターフェースであり、内部Dockerネットワーク内のコンテナーのゲートウェイとして機能します。

ルーターコンテナー自体は、コンテナーとの間でネットワークトラフィックのNATを実行します。

これら2つのインターフェースでコンテナーを実行するようにDockerを構成する方法は見つかりませんでした。私が得ることができる最も近いbridgeものは、割り当てられた2つのインターフェースを持っていることです。

手動で接続しようとすると、エラーが発生します。

# docker network connect host root_router_1
Error response from daemon: Container cannot be disconnected from host network or connected to host network

誰かがこれを達成する方法を、できればDocker Composeでさえ教えてもらえますか?


@PunMum残念ながらそうではありません。最終的に、すべてのコンテナーをホストネットワークに直接接続し、コンテナー内のIPを構成しました。
ヘキサホリック

回答:


2

githubのこのQ&Aによると:

ホストネットワークは特別です。サービスでnetwork_mode:hostを使用する必要があります


network_modeあなたは、内部ネットワークとホストネットワークに接続されている何かを必要とする場合には動作しません。この問題に対する明確な解決策を見つけることができないのは正気ではないようです。
jv-dev

2

Dockerでは、コンテナーをホストネットワークと他のDockerブリッジネットワークに同時に接続することはできません。理由を例を挙げて説明します。

  • コンテナC1について考えてみましょう。仮に、C1はホストネットワーク(--net = host)とDockerブリッジネットワークBr1(--net = Br1)に接続されます。
  • 2番目のコンテナー(C2としましょう)がBr1に接続されています。

上記の設定では、C2からホストネットワークが見えることが推測されます。これが、Dockerがホストネットワークをホスト指定されていないコンテナーに誤って公開しないようにする理由です。

そうは言っても、コンテナーのセットがあり、それらすべてを相互接続して、単一のコンテナーだけがホストネットワークにアクセスできるようにしたい場合、私のアプローチは次のようになります。

  • [C2、...、CN]はユーザー定義のDockerブリッジBr1(--net = Br1)に接続されています
  • C1はホストネットワークに接続されています(--net = host)
  • C1は、残りのコンテナーからアクセスできるようにポートを公開します

編集:残りのコンテナーからC1に到達できるようにiptablesポリシーを適応させる必要があります(https://docs.docker.com/network/iptables/を参照)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.