Von einer AWS ec2-Instanz (die ausgeführt wird docker
) versuche curl
ich, einen von Docker-Containern gehosteten Webdienst zu verwenden.
Gegeben:
[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
Ich kann den Webdienst aus dem Container heraus aufrufen:
[ec2-user]$ docker exec -it b56fa0d76d5c bash
root@b56fa0d76d5c:/# curl 'http://localhost/health'
Request is missing required query parameter 'apiName'
Aber ich kann es vom Gastgeber nicht treffen:
[ec2-user]$ curl 'http://localhost/health'
curl: (56) Recv failure: Connection reset by peer
Ich habe mir diese detaillierte Antwort auf diesen curl
Fehler angesehen, bin mir aber nicht sicher, wie ich dieses Problem beheben soll.
quelle
netstat
auf dem Container, aber ich lief:ss -a | grep -i LIST
um auszugebentcp LISTEN 0 100 ::ffff:127.0.0.1:http :::*
. Wenn ich diese Ausgabe richtig gelesen habe, hört sie dann zulocalhost:80
?"0.0.0.0"
als Schnittstelle, nicht"localhost"
.0.0.0.0
.Sie können dies untersuchen, indem Sie tshark auf dem Container installieren und dann Folgendes tun
tshark -i any
:Wenn Sie dann eine externe Anfrage stellen, sollten Sie Folgendes sehen:
Das Netzwerkpaket ist eingegangen, hat aber mit a geantwortet
RST
, was bedeutet, dass es abgelehnt wurde.Höchstwahrscheinlich hören Sie
127.0.0.1
eher zu als0.0.0.0
- alle IPs.quelle