คอนเทนเนอร์นักเทียบท่าของฉันจะเปิดเผยอินเตอร์เฟส HTTP บนพอร์ต 8500 ซึ่งถูกแมปกับโฮสต์พอร์ต 8500 ซึ่งไม่ได้เปิดใช้งาน IPv6 ยังคงหมายความว่าฉันควรจะสามารถเข้าถึงได้ที่ localhost: 8500 เป็นที่ต้องการ IPv6 ดังนั้นฉันเลยจบด้วยการร้องขอ [:: 1]: 8500 อันนี้ติดมันไม่เคยกลับมา
ทำซ้ำสิ่งนี้ด้วย curl คำสั่งนี้ค้าง:
curl -g -6 "http://[::1]:8500"
ตัวเลือก --verbose ของ curl ไม่แสดงอะไรเลย --ascii-trace ในเวลาเดียวกันการร้องขอไปยัง localhost ของ IPv4 สำเร็จ:
curl http://127.0.0.1:8500
ให้ HTML ที่คาดหวังกับฉัน ถ้าฉันใช้เซิร์ฟเวอร์ IPv4 HTTP บนลูปแบ็คให้ใช้
python -m SimpleHTTPServer 4001
แล้วฉันจะได้รับ HTML จำนวนมากสำหรับ localhost ของ IPv4
curl http://127.1:4001
และความล้มเหลวในการเชื่อมต่อที่เหมาะสมสำหรับ IPv6:
curl -g -6 "http://[::1]:4001"
curl: (7) Failed to connect to ::1 port 4001: Connection refused
สิ่งที่ควรทราบ: นักเทียบท่า 1.7.1 IPv6 ไม่ได้เปิดใช้งานสำหรับคอนเทนเนอร์ดังนั้นจึงไม่มีกฎ IPv6 iptable (ip6tables -v -L ไม่ได้ให้อะไรเลย)
คำถามของฉันคือ: ทำไมคำขอค้างและทำอะไร
tcp6 0 0 :::8500 :::* LISTEN 1648/docker
น่าสนใจ ทำไม? และทำไมมันปิดกั้น?
/proc/sys/net/ipv6/conf/all/disable_ipv6
ผลลัพธ์เป็น 0 ดังนั้นควรเปิดใช้งาน IPv6