ポート9000(164.16.240.30:9000
)の特定のURLにアクセスする必要があるWindows 10マシンでDebian dockerコンテナーを実行しています
ホストマシンはブラウザを介して問題なくアクセスできますが、ターミナルにログインしてwget 172.17.240.30:9000
を実行すると、failed: No route to Host
が表示されます。
これを解決するために私は追加しました:
ports:
- 9000:9000
docker-compose.ymlファイルに変更しますが、違いはないようです。
私がこれに慣れていないとわからない場合は、次に何を試してみますか?
Docker-compose.ymlファイル全体:
version: '3.4'
services:
tokengeneratorapi:
network_mode: Host
image: ${DOCKER_REGISTRY}tokengeneratorapi
build:
context: .
dockerfile: TokenGeneratorApi/Dockerfile
ports:
- 5000:80
- 9000
environment:
ASPNETCORE_ENVIRONMENT: local
SSM_PATH: /ic/env1/tokengeneratorapi/
AWS_ACCESS_KEY_ID:
AWS_SECRET_ACCESS_KEY:
私が実行しているコマンド:
docker-compose build --build-arg BRANCH=featuretest --build-arg CHANGE_ID=99 --build-arg CHANGE_TARGET=develop --build-arg SONAR_SERVER=164.16.240.30
コンテナーに接続の問題があるようです。ホストポートをコンテナーポートにマッピングしているだけなので、ターゲットソリューションが機能しない可能性があります(ターゲットURLが実際のホストではないことを考慮してください)。
https://docs.docker.com/compose/compose-file/#network_mode をチェックして、Hostに設定してみてください。
問題は、docker compose構成ファイルでホストモードを使用していることと、debianマシンのポートに対してIPTABLESファイアウォールが許可されていることですか?窓はどうですか?
network_mode: Host
これは実際にdockerブリッジを完全にバイパスするため、指定したポートセクションは適用されません。ホストシステムですべてのポートが開かれます。あなたはチェックすることができます
nestat -tunlp | grep 5000
また、ポート5000が開いておらず、予想どおり80のdockerにマップされていることがわかります。ただし、ポート80と9000はdebianネットワークで開いている必要がありますが、debian ipにのみドッキングブリッジをバインドしないでください。
ここから: https://docs.docker.com/network/Host/
警告:ホストネットワークモードを使用すると、公開されたポートが破棄されます
解決策として、network_mode行を削除すると、期待どおりに機能します。
ブラウザは164.16.240.30:9000
にアクセスできます。これは、プロキシ(通常のエンタープライズ環境)を経由するため、the proxy
は164.16.240.30
にネットワーク接続できるためです。それはあなたのホストが同じネットワーク接続を持っているという意味ではありません。実際、あなたのホストにはそれがないようです。これが、コンテナまたはターミナルからの直接のwgetでエラーNo route to Host
が発生する理由です。
すべてがプロキシを通過する必要があります。プロキシを適切に設定してみてください。通常、Linuxアプリは環境変数http_proxy,https_proxy
を使用しますが、アプリにはプロキシを設定する独自のオプションがあり、最終的にはソースコードレベルで設定できます。使用するアプリ/コードによって異なります。
このコードでは、コンテナーが164.16.240.30:9000
にアクセスすることを許可していません。 164.16.240.30:9000
ではなく、ターミナルから172.17.240.30:9000
を取得する必要があります。