curl (56) Recv ล้มเหลว: รีเซ็ตการเชื่อมต่อโดยเพียร์ - เมื่อกดปุ่มคอนเทนเนอร์นักเทียบท่า [ปิด]


10

จากอินสแตนซ์ AWS ec2 (ที่ทำงานdocker) ฉันกำลังพยายามcurlใช้บริการเว็บที่โฮสต์บนคอนเทนเนอร์ของนักเทียบท่า

ได้รับ:

[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

ฉันสามารถเข้าใช้บริการเว็บจากภายในคอนเทนเนอร์:

[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ข้อผิดพลาดนี้แต่ฉันไม่แน่ใจว่าจะแก้ไขปัญหานี้อย่างไร

คำตอบ:


9

การตั้งค่าการเชื่อมต่อไปยังคอนเทนเนอร์นักเทียบท่ามักจะระบุว่าคุณได้กำหนดการแมปพอร์ตสำหรับคอนเทนเนอร์ที่ไม่ได้ชี้ไปที่แอปพลิเคชัน

ดังนั้นหากคุณกำหนดการแมป 80:80 ให้ตรวจสอบว่ากระบวนการของคุณในอินสแตนซ์ของนักเทียบท่านั้นจริง ๆ แล้วทำงานบนพอร์ต 80 (netstat -an | grep LISTEN)

คุณได้รับการรีเซ็ตเมื่อพร็อกซี 'พร็อกซี' รับการเชื่อมต่อพยายามเชื่อมต่อกับกระบวนการภายในคอนเทนเนอร์ล้มเหลวดังนั้นรีเซ็ตการเชื่อมต่อ


ไม่มี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"
เควินเมเรดิ ธ

5
ขอบคุณเจสัน ทางออกของคุณไม่ใช่การแก้ไขที่แท้จริงสำหรับฉัน แต่มันนำฉันไปสู่ปัญหา สิ่งนี้เกิดขึ้นกับฉันเพราะบริการเริ่มต้นที่ 127.0.0.1:9200 (ภายในคอนเทนเนอร์) และไม่ใช่ "เผยแพร่" เนื่องจาก IP ดังนั้นฉันจึงเปลี่ยนเป็น 0.0.0.0:9200 และจากนั้นก็เริ่มทำงานจากนอกคอนเทนเนอร์ คุณต้องมีพอร์ต 9200 ที่เปิดเผย แต่ฉันแน่ใจว่าคุณรู้อยู่แล้ว
TomášTibenský

@KevinMeredith: ขอบคุณสำหรับสิ่งนั้น .. พยายามมาตลอด 4 ชั่วโมงที่ผ่านมาเพราะเรื่องนั้น !!!
aman_novice

@KevinMeredith 0.0.0.0ฉันยังไม่สามารถทำให้การทำงานหลังจากเปลี่ยนเป็นเจ้าภาพ
RandomEli

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.1มากกว่า0.0.0.0IP ทั้งหมด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.