Un de mes conteneurs Docker expose une interface HTTP sur le port 8500, qui est mappée sur le port hôte 8500. Elle n'est pas compatible IPv6. Cela signifie toujours que je devrais pouvoir y accéder sur localhost: 8500. IPv6 est préféré, donc je me retrouve avec une demande à [:: 1]: 8500. Celui-ci est coincé, il ne revient jamais.
En reproduisant ceci avec curl, cette commande est bloquée:
curl -g -6 "http://[::1]:8500"
L'option --verbose de curl ne révèle rien, pas plus que --ascii-trace. Dans le même temps, une demande à l'hôte local d'IPv4 réussit:
curl http://127.0.0.1:8500
me donnant le HTML attendu. Si j'exécute un serveur HTTP IPv4 en boucle, en utilisant
python -m SimpleHTTPServer 4001
alors je reçois beaucoup de HTML pour l'hôte local d'IPv4
curl http://127.1:4001
et une panne de connexion appropriée pour IPv6:
curl -g -6 "http://[::1]:4001"
curl: (7) Failed to connect to ::1 port 4001: Connection refused
À noter: Docker 1.7.1. IPv6 n'est pas activé pour le conteneur, il n'y a donc pas de règles IPv6 iptables. (ip6tables -v -L ne donne rien)
Ma question est la suivante: pourquoi la demande est-elle bloquée et quoi faire?
tcp6 0 0 :::8500 :::* LISTEN 1648/docker
fascinant. Pourquoi? Et pourquoi bloque-t-il?
/proc/sys/net/ipv6/conf/all/disable_ipv6
renvoie 0, IPv6 doit donc être activé.