web-dev-qa-db-ja.com

Dockerコンテナー内のホストへのルートがありません

ポート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
8
m.edmondson

コンテナーに接続の問題があるようです。ホストポートをコンテナーポートにマッピングしているだけなので、ターゲットソリューションが機能しない可能性があります(ターゲットURLが実際のホストではないことを考慮してください)。

https://docs.docker.com/compose/compose-file/#network_mode をチェックして、Hostに設定してみてください。

1
agermain

問題は、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行を削除すると、期待どおりに機能します。

1
Jinxmcg

ブラウザは164.16.240.30:9000にアクセスできます。これは、プロキシ(通常のエンタープライズ環境)を経由するため、the proxy164.16.240.30にネットワーク接続できるためです。それはあなたのホストが同じネットワーク接続を持っているという意味ではありません。実際、あなたのホストにはそれがないようです。これが、コンテナまたはターミナルからの直接のwgetでエラーNo route to Hostが発生する理由です。

すべてがプロキシを通過する必要があります。プロキシを適切に設定してみてください。通常、Linuxアプリは環境変数http_proxy,https_proxyを使用しますが、アプリにはプロキシを設定する独自のオプションがあり、最終的にはソースコードレベルで設定できます。使用するアプリ/コードによって異なります。

1
Jan Garaj

このコードでは、コンテナーが164.16.240.30:9000にアクセスすることを許可していません。 164.16.240.30:9000ではなく、ターミナルから172.17.240.30:9000を取得する必要があります。

0
boi yeet