Skip to content

By Тодор in Linux

Натъкнах се на неочаквана мотика при комуникацията от контейнер към самия себе си, но през публичния му адрес.

Очаквано тук трябва да се случат някои гимнастики с 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

Tags: , , , , , , , , , , , ,

Comment Feed

No Responses (yet)



Some HTML is OK

or, reply to this post via trackback.