Saltar al contenido

Conexión restablecida por par cuando se golpea el contenedor Docker

Solución:

Verificaría si la aplicación del servidor está configurada para escuchar solo las solicitudes provenientes de su “localhost”, esta verificación depende del tipo de servidor que está utilizando, que no se menciona.

una verificación fácil es iniciar su contenedor de la siguiente manera:

docker run --network host -d yourimagename

No necesita preocuparse por el mapeo de puertos ya que está utilizando el host la red

luego intente curl, si eso funciona, entonces solo tendrá que revisar la configuración de IP de escucha de su servidor.

curl localhost:10009

Me gustaría ampliar la respuesta de @Bouzid Zitouni. De hecho, parece que hay un problema con las direcciones a las que se vincula el servidor.

Conexión restablecida por par generalmente indica que se ha definido una asignación de puertos para el contenedor que no apunta a un servidor de escucha. Aquí hay un ejemplo para ilustrar esto:

docker run -p 10009:10009 -it ubuntu bash

Instalar en pc nmap en contenedor:

apt-get update && apt install -y nmap

Correr ncat (solo localhost)

# ncat -v --listen localhost 10009
...
Ncat: Listening on 127.0.0.1:10009

Correr curl en el anfitrión:

# curl localhost:10009
curl: (56) Recv failure: Connection reset by peer

De hecho, obtiene el mismo resultado incluso si no tiene ningún proceso de servidor.

Correr ncat (todas las direcciones IP)

# ncat -v --listen 10009
...
Ncat: Listening on :::10009
Ncat: Listening on 0.0.0.0:10009

Curl en el host se conecta correctamente. Espero que ayude.

Creo que hay algunos problemas con la respuesta de @Bouzid Zitouni, según la documentación oficial de Docker:

este es el mismo nivel de aislamiento que si el proceso nginx se ejecutara directamente en el host de Docker y no en un contenedor

Sin embargo, si usa el --network host no tendrá redes aisladas en el contenedor, y el host El controlador de red solo funciona en hosts Linux.

El problema de Conexión rechazada / reiniciada ocurre porque su servidor está escuchando 127.0.0.1 dentro del contenedor y el reenvío de puertos va a la IP externa del contenedor (por ejemplo, 172.17.0.2).

Solución

En su caso, necesita ejecutar un nuevo contenedor para que su servidor escuche en todas las interfaces. Ejemplo usando Python http.server :

docker run -p 8000:8000 -it python:3.7-slim python3 -m http.server --bind 0.0.0.0

Nota

La opción --bind 0.0.0.0 es una opción específica de http.server. Probablemente su servidor tiene otras formas de especificar esto.

Referencias:

https://pythonspeed.com/articles/docker-connection-refused/

https://docs.docker.com/network/network-tutorial-host/

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *