Nginx proxy_pass в связанный контейнер докеров
У меня есть два докерных контейнера с nginx. контейнер1 связан с контейнером2. Затем Docker добавляет запись в /etc/hosts, которую я ввел в конфигурацию nginx, например:
server {
location ~ ^/some_url/(.*)$ {
proxy_pass http://container1/$1;
}
}
Я могу ping container1 из контейнера2, но nginx не может его решить:
* 1 нет разрешения, разрешенного для разрешения контейнера1
Как я могу проксировать запрос в другой контейнер докеров?
Ответы
Ответ 1
Вы должны взглянуть на этот ответ об использовании /etc/hosts в качестве вашего распознавателя: Использование /etc/hosts в качестве resolver для перезаписи URL
В основном, ваши DNS или resolver не используют /etc/hosts для разрешения имен во время поиска, но вы можете обойти это, установив dnsmasq
и используя 127.0.0.1
в качестве вашего распознавателя. Вы можете добавить 127.0.0.1 в качестве преобразователя непосредственно в конфигурацию nginx:
server {
location ~ ^/some_url/(.*)$ {
resolver 127.0.0.1;
proxy_pass http://container1/$1;
}
}
Ответ 2
Используйте непосредственно восходящий блок вместо имени контейнера
upstream backend {
server container1;
}
server {
location ~ ^/some_url/(.*)$ {
proxy_pass http://backend/$1;
}
}
Это должно допускать нормальное разрешение имен, что позволяет легко использовать докеры с nginx.
Ответ 3
Вы можете использовать встроенную службу DNS Docker, если она включена, проверьте свой преобразователь контейнера:
cat /etc/resolv.conf
Должно быть:
nameserver 127.0.0.11
Использовать этот IP как распознаватель:
server {
location ~ ^/some_url/(.*)$ {
resolver 127.0.0.11;
proxy_pass http://container1/$1;
} }