Pojemnik doker kopalni naraża interfejs HTTP na porcie 8500, który jest mapowany do portu hosta 8500. Jest nie obsługującym IPv6. To wciąż oznacza, że powinienem mieć do niego dostęp na localhost: 8500. Preferowany jest IPv6, więc kończę na żądaniu [:: 1]: 8500. Ten utknął, nigdy nie powraca.
Po odtworzeniu tego z zawijaniem to polecenie utknie:
curl -g -6 "http://[::1]:8500"
opcja curl --verbose niczego nie ujawnia, podobnie jak - ascii-trace. W tym samym czasie żądanie do lokalnego hosta IPv4 kończy się powodzeniem:
curl http://127.0.0.1:8500
dając mi oczekiwany HTML. Jeśli uruchomię serwer HTTP IPv4 w trybie sprzężenia zwrotnego, używając
python -m SimpleHTTPServer 4001
wtedy dostaję dużo HTML dla localhost IPv4
curl http://127.1:4001
i prawidłowa awaria połączenia dla IPv6:
curl -g -6 "http://[::1]:4001"
curl: (7) Failed to connect to ::1 port 4001: Connection refused
Ważne uwagi: Docker 1.7.1. Protokół IPv6 nie jest włączony dla kontenera, dlatego nie ma żadnych iptable reguł IPv6. (ip6tables -v -L nic nie daje)
Moje pytanie brzmi: dlaczego prośba blokuje się i co robi?
tcp6 0 0 :::8500 :::* LISTEN 1648/docker
Fascynujące. Dlaczego? I dlaczego to blokuje?
/proc/sys/net/ipv6/conf/all/disable_ipv6
daje 0, więc IPv6 powinien być włączony.