web-dev-qa-db-ja.com

Dockerネットワークをローカルネットワークに公開する

これは私が今しばらく解決しようとしている問題です。私はできる限り多くのリソースを試しましたが、まだ何もうまくいきませんでした。 :/

これが私が取り組もうとしていることです:
Dockerコンテナーをデプロイして、同じローカルネットワークにあるマシンからそれらにアクセスできるようにしたい。つまり、Dockerがコンテナーに配布するIPアドレスは、Dockerをホストするコンピューターと同じLAN上のクライアントコンピューターから到達可能である必要があります。

理想的には、次のように、DockerネットワークのゲートウェイとしてDockerホストを指すルートを追加するだけで済みます。

client@lan$ Sudo route add -net <docker-network>/<mask> gw <docker-Host>

そしてブーム、彼らはIPを入力するだけでコンテナにアクセスできます。もちろん、このルートはルーターから設定することもできます。

ネットワークブリッジがこれを行うのに役立つことはわかりましたが、このように機能させることはできませんでした。

これらすべてをどのように機能させるのですか?

2
iiPLD

Dockerコンテナー内のアプリケーションがネットワーク上の他のホストから到達可能であることを確認するだけの場合は、Dockerネットワークモードをホストに設定するのが最も簡単です。

docker run --net=Host image/toRun:1.0

これにより、ホストのIPアドレス上のイメージ内のポートが公開されます(ポートの衝突を回避するようにしてください)

3
mtak

以下を使用してDockerホストでIPv4転送を有効にする限り、ホストを介してコンテナーに到達するためのルートをクライアントに追加することは機能するはずです。

sysctl -w net.ipv4.ip_forward=1

ただし、適切なファイアウォールがないと、トラフィックが任意のインターフェイスから任意のインターフェイスにルーティングされるため、セキュリティへの影響に注意してください。

0
Martijn

これは、「ブリッジアダプタではない」から「ブリッジアダプタ」へのトラフィックを受け入れるようにDOCKER-USERチェーンを設定した場合に機能します。オプションで、tcpポート80(-p tcp --dport 80)などのプロトコルとポートに制限されます。このチェーンは、FORWARDテーブルのfilterチェーンから呼び出され、(Docker)ホスト宛てではなく、ホストを介してルーティングされるパケットを管理します。

次に、ゲートウェイとして機能するDockerホストを介してDockerネットワークをルーティングするために、LANルーターを静的ルートで構成する必要があります。ルーターは、この情報を使用して3つのことを実行できます。

  • コンテナ宛てのトラフィックに対してICMPREDIRECTパケットを送信します。

  • DHCPリースで静的ルートを配布する(オプション121)

  • Dockerホストを介してパケットをルーティングしますが、これはルートの非対称性につながります:クライアント→ルーター→ホスト→コンテナー、応答はコンテナー→ホスト→クライアントになります。

これらのどちらも私には本当に魅力的なオプションのようには思えません。

0
j0057