15

docker APIを読み、単純なコンテナーを作成して 1 つのポートを公開しようとしました。

私の例では、コンテナー内のTCPポートでリッスンするアプリケーションがあり、ポート9595で外界 (コンテナーのホスト) からアクセスしたいと考えています9090

私が持っているコンテナを作成するとき"ExposedPorts": { "9595/tcp: {}" }"PortBindings": { "9595/tcp": [{ "HostPort": "9090" }] }.

なので、ホストマシンからアクセスすれば動きますhttp://container_internal_ip:9595!しかし、http://localhost:9090このポート マップ機能を使用して期待していた にアクセスすると、機能しません...

走っている間、docker port containerID私は持っていて9595/tcp -> 0.0.0.0:9090、それはwhen connecting to any IP on the host, at port 9090, forward to the container in port 9595.

それで、ここで何が問題なのですか?9090 に接続できないのはなぜですか?

説明をいただければ幸いです。

4

2 に答える 2

5

使用している docker コマンドを投稿してください。

Docker Toolbox または Docker for Windows を使用する場合は、特別な処理が必要です。問題なくlocalhostが表示されるはずです(コンテナーが Linux の場合)。コンテナーを外側から見えるようにする場合は、Elevated Power Shell でこれを試してください。

netsh interface portproxy add v4tov4 listenaddress=yourip listenport=9090 connectaddress=10.0.75.1 connectport=9090

ただし、コンテナーが Windows の場合、localhostは表示されず、コンテナーの内部アドレスを使用する必要があります。

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <cointainerid>

参考:https ://blog.docker.com/2016/09/build-your-first-docker-windows-server-container/

よろしく

于 2016-11-01T03:37:30.090 に答える
5

ポートは実際には予想どおり「外の世界」に公開されています。現在の Windows ネットワークの制限により、ループバック インターフェイス (localhost または 127.0.0.1) 上のコンテナー ホスト マシン自体からアクセスできません。コンテナー ホストのループバック インターフェイス経由でアクセスするのではなく、ネットワーク上の別のマシンから、コンテナー ホストの IP とコンテナーが公開しているポート番号を使用してアクセスしてみてください。

これについては、 https: //blog.sixeyed.com/published-ports-on-windows-containers-dont-do-loopback/ に良い記事があります。

于 2017-04-27T12:49:57.263 に答える