[英]No route to host within docker container
我在 Windows 10 機器上運行 Debian docker 容器,它需要訪問端口 9000 ( 164.16.240.30:9000
) 上的特定 url
主機可以通過瀏覽器正常訪問它,但是當我登錄終端並運行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並嘗試將其設置為主機。
您的瀏覽器可以訪問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.