簡體   English   中英

沒有到 docker 容器內主機的路由

[英]No route to host within docker container

我在 Windows 10 機器上運行 Debian docker 容器,它需要訪問端口 9000 ( 164.16.240.30:9000 ) 上的特定 url

主機可以通過瀏覽器正常訪問它,但是當我登錄終端並運行wget 172.17.240.30:9000failed: 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並嘗試將其設置為主機。

您的瀏覽器可以訪問164.16.240.30:9000 ,因為它通過代理(典型的企業環境),因此the proxy具有到164.16.240.30網絡連接。 這並不意味着您的主機也具有相同的網絡連接。 實際上,您的主機似乎沒有那個。 這就是為什么從容器或終端直接 wget 出現錯誤No route to host

一切都必須通過代理。 嘗試正確配置代理 - Linux 應用程序通常使用環境變量http_proxy,https_proxy ,但應用程序可能有自己的配置代理選項,最終您可以在源代碼級別進行配置。 這取決於使用的應用程序/代碼。

我認為問題在於您在 docker compose 配置文件中使用了主機模式,並且您是否為 debian 機器中的端口允許 IPTABLES 防火牆? 窗戶呢?

network_mode: host 

它實際上完全繞過了 docker 橋,因此不應用您指定的端口部分。 所有端口都將在主機系統上打開。 你可以檢查

nestat -tunlp | grep 5000

並且您會看到端口 5000 未打開並映射到 docker 的 80,如您所料。 但是端口 80 和 9000 應該在 debian 網絡上打開,但不綁定到任何 docker 網橋,只綁定到 debian ip。

從這里: https : //docs.docker.com/network/host/

警告:使用主機網絡模式時,已發布的端口將被丟棄

解決方案可能是刪除 network_mode 行,它會按預期工作。

您的代碼不允許您的容器訪問164.16.240.30:9000 您應該從終端 wget 164.16.240.30:9000而不是172.17.240.30:9000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM