Мій контейнер докера виставляє HTTP-інтерфейс на порт 8500, який відображається на порт 8500 хосту. Це не включено IPv6. Це все ще означає, що я повинен мати можливість отримати доступ до нього на localhost: 8500. IPv6 є кращим, тому я закінчую запит на [:: 1]: 8500. Цей застряє, він ніколи не повертається.
Відтворюючи це за допомогою curl, ця команда застрягає:
curl -g -6 "http://[::1]:8500"
curl's - вербовий варіант нічого не виявляє, а також --ascii-слід. У той же час, запит на локальний хост IPv4 вдається:
curl http://127.0.0.1:8500
що дає мені очікуваний HTML. Якщо я запускаю HTTP-сервер IPv4 за допомогою зворотного зв'язку, використовуючи
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 не увімкнено, отже, немає iptable правил IPv6. (ip6tables -v -L нічого не дає)
Моє запитання: Чому запит застрягає, і що робити?
tcp6 0 0 :::8500 :::* LISTEN 1648/docker
Захоплююче. Чому? І чому це блокує?
/proc/sys/net/ipv6/conf/all/disable_ipv6
отримує 0, тому IPv6 слід включити.