servicio de reenvío portuario -> contenedor

servicio de reenvío portuario -> contenedor

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.

información relacionada