web-dev-qa-db-fra.com

curl (56) Échec Recv: réinitialisation de la connexion par l'homologue - lors de l'utilisation du conteneur Docker

À partir d'une instance AWS ec2 (qui 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 détaillée réponse sur cette erreur curl, mais je ne sais pas comment déboguer ce problème.

10
Kevin Meredith

La réinitialisation de la connexion à un conteneur Docker indique généralement que vous avez défini un mappage de port pour le conteneur qui ne pointe pas vers une application.

Donc, si vous avez défini un mappage 80:80, vérifiez que votre processus à l'intérieur de l'instance de docker s'exécute bien sur le port 80 (netstat -an | grep LISTEN).

Vous obtenez une réinitialisation lorsque le "proxy" Docker récupère la connexion, tente de se connecter au processus à l'intérieur du conteneur, échoue, réinitialise donc la connexion.

8
Jason Martin

Vous pouvez enquêter sur cela en installant tshark sur le conteneur, puis faites tshark -i any:

Si vous effectuez ensuite une demande en externe, vous devriez voir quelque chose comme ci-dessous:

root@618910b515f0:/code# tshark -i any
Running as user "root" and group "root". This could be dangerous.
Capturing on 'any'
tshark: cap_set_proc() fail return: Operation not permitted

tshark: cap_set_proc() fail return: Operation not permitted

    1 0.000000000   172.18.0.1 → 172.18.0.3   TCP 76 45844 → 8001 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=820044004 TSecr=0 WS=128
    2 0.000019457   172.18.0.3 → 172.18.0.1   TCP 56 8001 → 45844 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0

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 sur 127.0.0.1 plutôt que 0.0.0.0 - toutes les adresses IP.

1