Em uma instância do AWS ec2 (que é executada docker
), estou tentando curl
acessar o serviço da web hospedado em contêiner do 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
Eu posso acessar o serviço web de dentro do contêiner:
[ec2-user]$ docker exec -it b56fa0d76d5c bash
root@b56fa0d76d5c:/# curl 'http://localhost/health'
Request is missing required query parameter 'apiName'
Mas não consigo acessá-lo do host:
[ec2-user]$ curl 'http://localhost/health'
curl: (56) Recv failure: Connection reset by peer
Eu olhei para esta resposta detalhada sobre esse curl
erro, mas não tenho certeza de como depurar esse problema.
fonte
netstat
no contêiner, mas eu corri:ss -a | grep -i LIST
para a saídatcp LISTEN 0 100 ::ffff:127.0.0.1:http :::*
. Se eu li essa saída corretamente, está ouvindolocalhost:80
?"0.0.0.0"
como interface, não"localhost"
.0.0.0.0
.Você pode investigar isso instalando o tshark no contêiner e, em seguida, faça
tshark -i any
:Se você fizer uma solicitação externamente, deverá ver algo como o abaixo:
O pacote de rede chegou, mas respondeu com a
RST
, o que significa que foi rejeitado.Provavelmente você está ouvindo em
127.0.0.1
vez de0.0.0.0
- todos os IPs.fonte