curl(56)Recv失敗:ピアによる接続のリセット-Dockerコンテナーにヒットしたとき[クローズ]


10

AWS ec2インスタンス(実行中docker)から、Docker curlコンテナーでホストされているWebサービスに接続しようとしています。

与えられた:

[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

コンテナー内からWebサービスにアクセスできます。

[ec2-user]$ docker exec -it b56fa0d76d5c bash
root@b56fa0d76d5c:/# curl 'http://localhost/health'
Request is missing required query parameter 'apiName' 

しかし、私はホストからそれを打つことができません:

[ec2-user]$ curl 'http://localhost/health'
curl: (56) Recv failure: Connection reset by peer

このエラーに関する詳細な回答curl確認しましたが、この問題のデバッグ方法がわかりません。

回答:


8

Dockerコンテナーへの接続リセットは、通常、アプリケーションを指さないコンテナーのポートマッピングを定義したことを示します。

したがって、80:80のマッピングを定義している場合は、Dockerインスタンス内のプロセスが実際にポート80で実行されていることを確認してください(netstat -an | grep LISTEN)。

Dockerの「プロキシ」が接続を取得し、コンテナ内のプロセスへの接続を試みて失敗するとリセットが発生するため、接続をリセットします。


netstatコンテナーではありませんが、ss -a | grep -i LIST出力するにはを実行しましたtcp LISTEN 0 100 ::ffff:127.0.0.1:http :::*。その出力を正しく読んだ場合、それはリッスンしていlocalhost:80ますか?
ケビンメレディス

7
実は、stackoverflow.com/a/26553296/409976はすなわち使用して、私の問題を修正し"0.0.0.0"、インターフェイスとしてではありません "localhost"
Kevin Meredith

5
ジェイソン、ありがとう。あなたの解決策は私にとって実際の修正ではありませんでしたが、それが問題を引き起こしました。これは、サービスが127.0.0.1:9200(コンテナー内)で開始され、IPが原因で「公開」されなかったために起こりました。そこで、0.0.0.0:9200に変更すると、コンテナーの外側から機能し始めました。9200ポートを公開する必要がありますが、すでに知っているはずです。
トマーシュTibenský

@KevinMeredith:ありがとうございます。過去4時間、苦労してきました!!!
aman_novice 2017

@KevinMeredithホストをに変更した後も動作しません0.0.0.0
Lingbo Tang 2017

1

これを調べるには、コンテナーにtsharkをインストールしてから、次のようにしますtshark -i any

その後、外部でリクエストを行うと、次のようなものが表示されます。

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

ネットワークパケットが着信しましたが、で応答しましたRST。つまり、拒否されました。


ほとんどの場合127.0.0.10.0.0.0すべてのIP ではなく、リッスンしています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.