Desde una instancia de AWS ec2 (que se ejecuta docker
), intento acceder a curl
mi servicio web alojado en contenedor de Docker .
Dado:
[ec2-user]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b56fa0d76d5c $REGISTRY/$WORK/metrics:v0.1.0 "/bin/sh -c 'sh /root" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp insane_leakey
Puedo acceder al servicio web desde el contenedor:
[ec2-user]$ docker exec -it b56fa0d76d5c bash
root@b56fa0d76d5c:/# curl 'http://localhost/health'
Request is missing required query parameter 'apiName'
Pero, no puedo golpearlo desde el host:
[ec2-user]$ curl 'http://localhost/health'
curl: (56) Recv failure: Connection reset by peer
Miré esta respuesta detallada sobre este curl
error, pero no estoy seguro de cómo depurar este problema.
fuente
netstat
en el contenedor, pero ejecuté:ss -a | grep -i LIST
a la salidatcp LISTEN 0 100 ::ffff:127.0.0.1:http :::*
. Si leo esa salida correctamente, ¿está escuchandolocalhost:80
?"0.0.0.0"
como interfaz, no"localhost"
.0.0.0.0
.Puede investigar esto instalando tshark en el contenedor y luego hacer
tshark -i any
:Si luego realiza una solicitud externamente, debería ver algo como lo siguiente:
El paquete de red entró pero respondió con un
RST
, lo que significa que fue rechazado.Lo más probable es que esté escuchando en
127.0.0.1
lugar de0.0.0.0
todas las IP.fuente