Container buruh pelabuhan milik saya memperlihatkan antarmuka HTTP pada port 8500, yang dipetakan ke host port 8500. Itu tidak diaktifkan IPv6. Ini masih berarti, saya harus dapat mengaksesnya di localhost: 8500. IPv6 lebih disukai, jadi saya berakhir dengan permintaan ke [:: 1]: 8500. Yang ini macet, tidak pernah kembali.
Memproduksi ini dengan ikal, perintah ini macet:
curl -g -6 "http://[::1]:8500"
Opsi --verbose curl tidak mengungkapkan apa pun, begitu pula --ascii-trace. Pada saat yang sama, permintaan ke localhost IPv4 berhasil:
curl http://127.0.0.1:8500
memberi saya HTML yang diharapkan. Jika saya menjalankan server HTTP IPv4 pada loopback, gunakan
python -m SimpleHTTPServer 4001
maka saya mendapatkan banyak HTML untuk localhost IPv4
curl http://127.1:4001
dan kegagalan koneksi yang tepat untuk IPv6:
curl -g -6 "http://[::1]:4001"
curl: (7) Failed to connect to ::1 port 4001: Connection refused
Hal yang perlu diperhatikan: Docker 1.7.1. IPv6 tidak diaktifkan untuk wadah, karenanya tidak ada aturan IPv6 iptable. (ip6tables -v -L tidak memberikan apa-apa)
Pertanyaan saya adalah: Mengapa permintaan macet, dan melakukan apa?
tcp6 0 0 :::8500 :::* LISTEN 1648/docker
Menarik. Mengapa? Dan mengapa itu menghalangi?
/proc/sys/net/ipv6/conf/all/disable_ipv6
hasilkan 0, jadi IPv6 harus diaktifkan.