À partir d'une instance AWS ec2 (qui s'exécute docker
), j'essaie de curl
mon service Web hébergé par conteneur Docker .
Donné:
[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
Je peux accéder au service Web depuis le conteneur:
[ec2-user]$ docker exec -it b56fa0d76d5c bash
root@b56fa0d76d5c:/# curl 'http://localhost/health'
Request is missing required query parameter 'apiName'
Mais, je ne peux pas le frapper de l'hôte:
[ec2-user]$ curl 'http://localhost/health'
curl: (56) Recv failure: Connection reset by peer
J'ai regardé cette réponse détaillée sur cette curl
erreur, mais je ne sais pas comment déboguer ce problème.
la source
netstat
sur le conteneur, mais j'ai couru:ss -a | grep -i LIST
à la sortietcp LISTEN 0 100 ::ffff:127.0.0.1:http :::*
. Si je lis correctement cette sortie, alors j'écoutelocalhost:80
?"0.0.0.0"
l'interface, non"localhost"
.0.0.0.0
.Vous pouvez enquêter sur cela en installant tshark sur le conteneur, puis procédez comme suit
tshark -i any
:Si vous faites ensuite une demande en externe, vous devriez voir quelque chose comme ci-dessous:
Le paquet réseau est entré mais il a répondu par un
RST
, ce qui signifie qu'il a été rejeté.Vous écoutez probablement
127.0.0.1
plutôt que0.0.0.0
- toutes les adresses IP.la source