запит на згортання до IPv6 localhost застрягає


9

Мій контейнер докера виставляє 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 нічого не дає)

Моє запитання: Чому запит застрягає, і що робити?


1
Покажіть нам вихід "netstat -6 -an"?
Rui F Ribeiro

Так, докер слухає цей порт: tcp6 0 0 :::8500 :::* LISTEN 1648/docker Захоплююче. Чому? І чому це блокує?
mknecht

Прослуховування та не налаштоване, або IPv6 відключений у sysctl, я думаю. nginx, apache, lighthttp, чи додати ви веб-сервер до посади, будь ласка?
Rui F Ribeiro

Всередині контейнера прослуховує консул, сховище ключових значень для конфігурації. Але я не думаю, що це доречно: контейнер не підтримує IPv6. Цей запит ніколи не повинен звертатися до консула. Я не розумію, на якому шарі він застряє. На хості /proc/sys/net/ipv6/conf/all/disable_ipv6отримує 0, тому IPv6 слід включити.
mknecht

2
Це не означає багато. Ви можете відключити IPv6 навіть у sysctl та в нових ядрах, доки програма прив'язується до IPv6-сокета, запит буде задоволено. Біль в попці, як ви повинні пройти кожен демон, який підтримує IPv6 і відключить конфігурацію IPv6.
Rui F Ribeiro

Відповіді:


0

Увімкніть ipv6 та ebable переадресацію.

# cat /etc/sysctl.conf | grep ipv6
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0

1
Мабуть, ОП не намагається змусити щось працювати; власне питання "Чому запит застрягає, і що робити?". Чи дає ваша відповідь пояснення цьому? Якщо так, то можете, будь ласка, уточнити як?
фра-сан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.