GNU/Linux >> Linux の 問題 >  >> Linux

ホスト ポートを Docker コンテナに転送する

コメントの 1 つに記載されているように、これは Mac で機能します (おそらく Windows/Linux でも同様です):

<ブロック引用>

コンテナからホスト上のサービスに接続したい

ホストの IP アドレスが変化します (ネットワークにアクセスできない場合は IP アドレスがありません)。特別な DNS 名 host.docker.internal に接続することをお勧めします これは、ホストが使用する内部 IP アドレスに解決されます。これは開発目的のためのものであり、Docker Desktop for Mac 以外の本番環境では機能しません。

gateway.docker.internal を使用してゲートウェイに到達することもできます .

https://docs.docker.com/docker-for-mac/networking/ から引用

これは、 --net=host を使用せずに機能しました .


--net=host を使用するのは、単純ですが比較的安全でない方法です。 docker run へのオプション .

このオプションは、コンテナーがホストのネットワーク スタックを使用するようにします。次に、ホスト名として「localhost」を使用するだけで、ホストで実行されているサービスに接続できます。

Docker コンテナーの IP アドレスからの接続を受け入れるようにサービスを構成する必要がなく、接続先の特定の IP アドレスまたはホスト名を Docker コンテナーに伝える必要がないため、これは構成が簡単です。ポート。

たとえば、イメージの名前が my_image であることを前提として、次のコマンドを実行してテストできます。 、あなたの画像には telnet が含まれています ユーティリティであり、接続するサービスはポート 25 にあります:

docker run --rm -i -t --net=host my_image telnet localhost 25

この方法を検討している場合は、このページのセキュリティに関する注意事項を参照してください:

https://docs.docker.com/articles/networking/

それは言う:

<ブロック引用>

--net=host -- コンテナーを別のネットワーク スタック内に配置することをスキップするよう Docker に指示します。本質的に、この選択は、コンテナーのネットワークをコンテナー化しないように Docker に指示します!コンテナー プロセスは引き続き独自のファイル システム、プロセス リスト、およびリソース制限に制限されますが、簡単な ip addr コマンドを実行すると、ネットワークに関しては、メインの Docker ホストの「外部」に存在し、そのネットワーク インターフェイスに完全にアクセスできることがわかります。 .これにより、コンテナーがホスト ネットワーク スタックを再構成することはできません ( --privileged=true が必要になります) が、コンテナー プロセスは他のルート プロセスと同様に番号の小さいポートを開くことができます。また、コンテナーが D-bus などのローカル ネットワーク サービスにアクセスできるようにします。これにより、コンテナー内のプロセスがコンピューターの再起動などの予期しないことを実行できるようになる可能性があります。このオプションは注意して使用する必要があります。


Docker ホストは、アダプターをすべてのコンテナーに公開します。最近の ubuntu を使用していると仮定すると、実行できます

ip addr

これにより、ネットワーク アダプタのリストが表示されます。そのうちの 1 つは次のようになります

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 22:23:6b:28:6b:e0 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
inet6 fe80::a402:65ff:fe86:bba6/64 scope link
   valid_lft forever preferred_lft forever

この IP (172.17.42.1) にバインドするように rabbit/mongo に指示する必要があります。その後、コンテナ内から 172.17.42.1 への接続を開くことができるはずです。


Linux
  1. Dockerの概要

  2. ホストから Docker コンテナのネットワーク名前空間にアクセスする方法

  3. Ubuntu で docker を実行中:マウントされたホスト ボリュームはコンテナーから書き込み可能ではありません

  1. 一部のDOCKERコマンド

  2. ホストディレクトリをDockerコンテナにマウントする方法

  3. ホスト上の NFS マウントを可視化し、Docker コンテナー内で読み書きできるようにする

  1. Dockerコンテナを終了する方法

  2. Docker コンテナーでサービスを自動的に開始する

  3. Docker コンテナのファイル システムの探索