ฉันมีแอปพลิเคชันที่สร้างเป็นอิมเมจ Docker ที่ทำงานได้อย่างถูกต้องในเครื่อง แต่ล้มเหลวใน Google Cloud Run โดยมี "ข้อผิดพลาดในการเชื่อมต่ออัปสตรีมหรือยกเลิกการเชื่อมต่อ/รีเซ็ตก่อนส่วนหัว เหตุผลในการรีเซ็ต: ข้อผิดพลาดของโปรโตคอล"
แอปพลิเคชันกำลังฟัง 0.0.0.0:8080 และไม่ต้องการการตรวจสอบสิทธิ์ฉันใช้งานใน Docker ในเครื่องด้วย
นักเทียบท่ารัน --rm --name myapp -p 8080:8080 myapp:1.0
ด้วย curl ในเครื่อง ฉันได้รับการตอบกลับที่ประสบความสำเร็จใน /
$ curl -v localhost:8080
* พยายาม ::1...
* ตั้งค่า TCP_NODELAY
* เชื่อมต่อกับ localhost (::1) พอร์ต 8080 (#0)
> เก็ท / HTTP/1.1
> โฮสต์: localhost:8080
> User-Agent: curl/7.64.1
> ยอมรับ: */*
>
< HTTP/1.1 200 ตกลง
< ประเภทเนื้อหา: application/json
< ต่างกันไป: แหล่งกำเนิด
< วันที่: วันเสาร์ที่ 24 กรกฎาคม 2021 13:54:11 GMT
< ความยาวเนื้อหา: 2
<
* การเชื่อมต่อ #0 ไปยังโฮสต์ localhost ยังคงอยู่
ตกลง* กำลังปิดการเชื่อมต่อ 0
ฉันได้ปรับใช้สิ่งนี้กับ Google cloud run as a service และเมื่อทำการร้องขอครั้งแรก ฉันเห็นเอาต์พุตบันทึกจากแอปพลิเคชันของฉันในบันทึกการรันบนคลาวด์ซึ่งแสดงว่าได้เริ่มต้นและกำลังฟังบนพอร์ต 8080
อย่างไรก็ตาม คำขอล้มเหลวด้วย
"ข้อผิดพลาดในการเชื่อมต่ออัปสตรีมหรือยกเลิกการเชื่อมต่อ/รีเซ็ตก่อนส่วนหัว เหตุผลในการรีเซ็ต: ข้อผิดพลาดของโปรโตคอล"
เอาต์พุตแบบเต็มจาก curl -v https://cloudrun-srv-stuff.a.run.app/ มีดังนี้
* ลอง 216.239.36.53...
* ตั้งค่า TCP_NODELAY
* เชื่อมต่อกับ cloudrun-srv-lz5wvvl32a-ez.a.run.app (216.239.36.53) พอร์ต 443 (#0)
* ALPN ให้บริการ h2
* ALPN ให้บริการ http/1.1
* ตั้งค่าตำแหน่งการตรวจสอบใบรับรองสำเร็จแล้ว:
* ไฟล์ CA: /etc/ssl/cert.pem
CApath: ไม่มี
* TLSv1.2 (ออก), การจับมือ TLS, สวัสดีลูกค้า (1):
* TLSv1.2 (IN), การจับมือ TLS, สวัสดีเซิร์ฟเวอร์ (2):
* TLSv1.2 (IN), การจับมือ TLS, ใบรับรอง (11):
* TLSv1.2 (IN), การจับมือ TLS, การแลกเปลี่ยนคีย์เซิร์ฟเวอร์ (12):
* TLSv1.2 (IN), การจับมือ TLS, เซิร์ฟเวอร์เสร็จสิ้น (14):
* TLSv1.2 (ออก), การจับมือ TLS, การแลกเปลี่ยนคีย์ไคลเอนต์ (16):
* TLSv1.2 (ออก), TLS เปลี่ยนรหัส, เปลี่ยนข้อมูลจำเพาะของรหัส (1):
* TLSv1.2 (ออก), การจับมือ TLS, เสร็จสิ้น (20):
* TLSv1.2 (IN), TLS เปลี่ยนรหัส, เปลี่ยนข้อมูลจำเพาะของรหัส (1):
* TLSv1.2 (IN), การจับมือ TLS, เสร็จสิ้น (20):
* การเชื่อมต่อ SSL โดยใช้ TLSv1.2 / ECDHE-ECDSA-CHACHA20-POLY1305
* ALPN เซิร์ฟเวอร์ที่ยอมรับให้ใช้ h2
* ใบรับรองเซิร์ฟเวอร์:
* หัวเรื่อง: C=US; ST=แคลิฟอร์เนีย; L=วิวภูเขา; O=Google LLC; CN=*.a.run.app
* วันที่เริ่ม: 28 มิ.ย. 01:08:46 น. 2021 GMT
* วันหมดอายุ: 20 กันยายน 01:08:45 น. 2021 GMT
* subjectAltName: โฮสต์ "cloudrun-srv-stuff.a.run.app" ตรงกับ "*.a.run.app" ของใบรับรอง
* ผู้ออก: C=US; O=Google Trust Services; CN=จีทีเอส CA 1O1
* ใบรับรอง SSL ตรวจสอบตกลง
* การใช้ HTTP2 เซิร์ฟเวอร์รองรับการใช้งานหลายอย่าง
* เปลี่ยนสถานะการเชื่อมต่อ (ยืนยัน HTTP/2)
* การคัดลอกข้อมูล HTTP/2 ในสตรีมบัฟเฟอร์ไปยังบัฟเฟอร์การเชื่อมต่อหลังจากอัปเกรด: len=0
* ใช้ Stream ID: 1 (จัดการง่าย 0x7f83b4810a00)
> เก็ท / HTTP/2
> โฮสต์: cloudrun-srv-stuff.a.run.app
> User-Agent: curl/7.64.1
> ยอมรับ: */*
>
* เปลี่ยนสถานะการเชื่อมต่อ (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 502
< ความยาวเนื้อหา: 87
< ประเภทเนื้อหา: ข้อความ/ธรรมดา
< วันที่: วันเสาร์ที่ 24 กรกฎาคม 2021 13:58:13 GMT
< เซิร์ฟเวอร์: Google Frontend
< x-cloud-trace-บริบท: 1370fab1a02839b367048f855593cbef/5890123523738625787;o=1
< alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; แม่=2592000; v="46,43"
<
ขั้นตอนต่อไปในการดีบักนี้คืออะไร