Tengo un servicio que contiene un contenedor.
en el contenedor hay un servidor Django con el puerto 8000 abierto.
Y mi entorno de servicio y contenedor está aquí abajo.
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
500e9b49dd35 registry:5000/myapp/djangosrc:latest "python manage.py ru…" 2 minutes ago Up 2 minutes 80/tcp, 8000-8001/tcp django_python.ti4iq9vbe6b6tskrnfni1r194.prc5s92pxrrfeerjj0oqnjykl
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
l1z94x8t69li django_python global 1/1 registry:5000/myapp/djangosrc:latest *:8001->8001/tcp, *:8082->8000/tcp
Entonces, cuando entro en el contenedor, funciona bien.
/ #docker container exec -it 500e9b49dd35 wget localhost:8000
index.html 100%[===================>] 77.36K --.-KB/s in 0s
Sin embargo no puedo conectarme conwget localhost:8082
Connecting to localhost:8082 (127.0.0.1:8082)
wget: can't connect to remote host (127.0.0.1): Connection refused
¿Hay algo que entendí mal???
Por favor, ayúdame. Realmente agradezco cualquier ayuda o sugerencia.
Estas son pruebas sugeridas por @BMitch (¡¡gracias!!)
docker run --rm --net container:500e9b49dd35 nicolaka/netshoot ss -lnt
Status: Downloaded newer image for nicolaka/netshoot:latest
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 127.0.0.11:40105 0.0.0.0:*
LISTEN 0 10 127.0.0.1:8000 0.0.0.0:*
Resolví el problema.
Esto se debe al servidor, no al reenvío de puertos.
mi servidor es
python manage.py runserver
se une127.0.0.1
así que cambié a
python manage.py runserver 0.0.0.0:8000
Puedo acceder desde fuera.
Gracias por su ayuda.
Respuesta1
En este resultado, puede ver que su aplicación dentro del contenedor está escuchando en 127.0.0.1 o bucle invertido:
docker run --rm --net container:500e9b49dd35 nicolaka/netshoot ss -lnt
Status: Downloaded newer image for nicolaka/netshoot:latest
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 127.0.0.11:40105 0.0.0.0:*
LISTEN 0 10 127.0.0.1:8000 0.0.0.0:*
Conexión en red en espacio de nombres en Docker, incluida la interfaz de bucle invertido. Por lo tanto, cada contenedor tiene su propia interfaz de bucle invertido, separada del host y de otros contenedores de forma predeterminada. Debe configurar la aplicación para que escuche en todas las interfaces a fin de que se pueda acceder a ella desde fuera del contenedor, incluso para que funcionen los puertos publicados. En IPv4, eso significa escuchar en 0.0.0.0 en lugar de 127.0.0.1. Esto debe configurarse en su aplicación, Docker no controla los puertos utilizados por la aplicación, solo reenvía a esos puertos.