Estou executando um contêiner de janela de encaixe Debian em uma máquina Windows 10 que precisa acessar um URL específico na porta 9000 ( 164.16.240.30:9000
)
A máquina host pode acessá-lo bem através do browser, no entanto, quando eu faça o login para o terminal e executar wget 172.17.240.30:9000
recebo failed: No route to host
.
Na tentativa de resolver isso, adicionei:
ports:
- 9000:9000
para o arquivo docker-compose.yml, no entanto, isso não parece ter feito diferença.
Caso você não consiga adivinhar que sou novo nisso, o que você tentaria a seguir?
Arquivo docker-compose.yml inteiro:
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:
Comando que estou executando:
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
docker
networking
docker-compose
dockerfile
containers
m.edmondson
fonte
fonte
164.16.240.30:9000
, que não está sendo executado em sua máquina. Seu navegador tem acesso a esse164.16.240.30:9000
recurso, mas o contêiner não. Estou certo? Por que você está tentando obter recursos diferentes172.17.240.30:9000
do terminal e não164.16.240.30:9000
?I log in to the terminal and run
está dentro do contêiner? e por que você está usando IP 172.17.240.30 diferente vs 164.16.240.30Respostas:
Parece que o contêiner está com problemas de conectividade, portanto é provável que sua solução proposta não funcione, pois é apenas o mapeamento de uma porta de host para uma porta de contêiner (considerando que o URL de destino não é o host real).
Confira https://docs.docker.com/compose/compose-file/#network_mode e tente configurá-lo como host.
fonte
wget www.google.co.uk
retornam 200. Talvez isso seja uma coisa do Linux, talvez o iptables?docker network prune
. Além disso, em que a imagem se baseia?Seu navegador tem acesso
164.16.240.30:9000
, porque está passando por proxy (ambiente típico de empresa), ethe proxy
também por conectividade de rede164.16.240.30
. Isso não significa que também o seu host tenha a mesma conectividade de rede. Na verdade, parece que seu host não possui esse. Essa é a razão pela qual o wget direto do contêiner ou do terminal tem erroNo route to host
.Tudo deve passar pelo proxy. Tente configurar o proxy corretamente - os aplicativos Linux
http_proxy,https_proxy
geralmente usam variáveis de ambiente , mas os aplicativos podem ter uma opção própria para configurar o proxy; eventualmente, você pode configurá-lo no nível do código-fonte. Depende do aplicativo / código usado.fonte
Acho que o problema é que você usa o modo host no seu arquivo de configuração de composição do docker e você tem o firewall IPTABLES permitido para as portas na máquina debian? E as janelas?
que na verdade ignora completamente a ponte da janela de encaixe para que a seção de portas especificada não seja aplicada. Todas as portas serão abertas no sistema host. Você pode verificar com
E você verá que a porta 5000 não está aberta e mapeada para os 80 da janela de encaixe, como seria de esperar. No entanto, as portas 80 e 9000 devem estar abertas na rede debian, mas não ligadas a nenhuma ponte docker apenas ao ip debian.
A partir daqui: https://docs.docker.com/network/host/
Como solução poderia ser remover a linha network_mode e funcionará conforme o esperado.
fonte
Seu código não permite que seu contêiner acesse
164.16.240.30:9000
. Você deve164.16.240.30:9000
sair do terminal em vez de172.17.240.30:9000
.fonte