rev="post-1031" No Comments
Натъкнах се на неочаквана мотика при комуникацията от контейнер към самия себе си, но през публичния му адрес.
Очаквано тук трябва да се случат някои гимнастики с iptables, за да има двупосочна транслиране, известно още като nat reflection или hairpin nat. Да, обаче пак не работи!
В крайна сметка се оказва, че Docker си прави всичко сам, ама само, ако си поискаме 🙂
Вградената userland proxy услуга трябва да бъде спряна, за да се получи това, което желаем, а именно, ако контейнера ни е с адрес 172.17.0.2, който от Интернет е достъпен на 70.80.90.100, да можем от самия контейнер да се свържем към адреса 70.80.90.100 и това да бъде правилно транслирано от хоста обратно към контейнера.
На кратко:
Създаваме файл /etc/docker/daemon.json със следното съдържание:
{
"userland-proxy": false
}
И рестартираме докер услугата:
systemctl restart docker
Дали се е получило можем да видим от следния параметър на ядрото на ОС съдържаща контейнерите (трябва да е със стойност 1):
# sysctl net.ipv4.conf.docker0.route_localnet
net.ipv4.conf.docker0.route_localnet = 1
Последни коментари