Estoy ejecutando un contenedor de Docker de Debian en una máquina con Windows 10 que necesita acceder a una URL particular en el puerto 9000 ( 164.16.240.30:9000
)
La máquina host puede acceder bien a través del navegador, sin embargo, cuando inicio sesión en el terminal y ejecuto wget 172.17.240.30:9000
, obtengo failed: No route to host
.
En un intento de resolver esto, agregué:
ports:
- 9000:9000
al archivo docker-compose.yml, sin embargo, eso no parece haber hecho ninguna diferencia.
En caso de que no puedas adivinar que soy nuevo en esto, ¿qué probarías después?
Todo el archivo 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:
Comando que estoy ejecutando:
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
fuente
fuente
164.16.240.30:9000
, que no se está ejecutando en su máquina. Su navegador tiene acceso a este164.16.240.30:9000
recurso, pero el contenedor no. Estoy en lo cierto? ¿Por qué estás intentando obtener recursos diferentes172.17.240.30:9000
del terminal y no164.16.240.30:9000
?I log in to the terminal and run
¿estás dentro del contenedor? y por qué está usando una IP diferente 172.17.240.30 vs 164.16.240.30Respuestas:
Parece que el contenedor tiene problemas de conectividad, por lo que es probable que la solución propuesta no funcione, ya que eso solo asigna un puerto de host a un puerto de contenedor (teniendo en cuenta que su URL de destino no es el host real).
Consulte https://docs.docker.com/compose/compose-file/#network_mode e intente configurarlo como host.
fuente
wget www.google.co.uk
devuelve 200. Tal vez esto sea una cosa de Linux, ¿iptables quizás?docker network prune
. Además, ¿en qué se basa la imagen?Su navegador tiene acceso
164.16.240.30:9000
, ya que está pasando por un proxy (entorno empresarial típico), por lo que tambiénthe proxy
tiene conectividad de red164.16.240.30
. No significa que también su host tenga la misma conectividad de red. En realidad, parece que tu host no tiene ese. Esa es la razón por la cual wget directo desde el contenedor o desde la terminal tiene un errorNo route to host
.Todo debe pasar por el proxy. Intente configurar el proxy correctamente: las aplicaciones de Linux usan variables de entorno
http_proxy,https_proxy
generalmente, pero las aplicaciones pueden tener su propia opción para configurar el proxy, eventualmente puede configurarlo en el nivel del código fuente. Depende de la aplicación / código utilizado.fuente
Creo que el problema es que utiliza el modo host en su archivo de configuración de composición de Docker y ¿tiene permitido el firewall IPTABLES para los puertos en la máquina Debian? ¿Qué hay de las ventanas?
que en realidad pasa por alto el puente acoplable por completo, por lo que no se aplica la sección de puertos que especifique. Todos los puertos se abrirán en el sistema host. Puedes consultar con
Y verá que el puerto 5000 no está abierto y asignado a los 80 del acoplador como era de esperar. Sin embargo, los puertos 80 y 9000 deberían estar abiertos en la red de Debian pero no estar unidos a ningún puente acoplable solo a la IP de Debian.
Desde aquí: https://docs.docker.com/network/host/
Como solución podría ser eliminar la línea network_mode y funcionará como se esperaba.
fuente
Su código no permite el acceso a su contenedor
164.16.240.30:9000
. Debería wget164.16.240.30:9000
desde la terminal en lugar de172.17.240.30:9000
.fuente