Un contenitore docker mio espone un'interfaccia HTTP sulla porta 8500, che è mappato porta host 8500. Si Non IPv6 abilitato. Ciò significa ancora, dovrei essere in grado di accedervi su localhost: 8500. Si preferisce IPv6, quindi finisco con una richiesta a [:: 1]: 8500. Questo si blocca, non ritorna mai.
Riproducendolo con il ricciolo, questo comando si blocca:
curl -g -6 "http://[::1]:8500"
L'opzione --verbose di curl non rivela nulla, e nemmeno --ascii-trace. Allo stesso tempo, una richiesta all'host locale di IPv4 ha esito positivo:
curl http://127.0.0.1:8500
dandomi l'HTML previsto. Se eseguo un server HTTP IPv4 su loopback, utilizzando
python -m SimpleHTTPServer 4001
quindi ricevo un sacco di HTML per localhost di IPv4
curl http://127.1:4001
e un corretto errore di connessione per IPv6:
curl -g -6 "http://[::1]:4001"
curl: (7) Failed to connect to ::1 port 4001: Connection refused
Cose da notare: Docker 1.7.1. IPv6 non è abilitato per il contenitore, quindi non esistono regole iptable IPv6. (ip6tables -v -L non fornisce nulla)
La mia domanda è: perché la richiesta si blocca e facendo cosa?
tcp6 0 0 :::8500 :::* LISTEN 1648/docker
affascinante. Perché? E perché sta bloccando?
/proc/sys/net/ipv6/conf/all/disable_ipv6
restituisce 0, quindi IPv6 deve essere abilitato.