nginx proxy_pass в связанный контейнер dockerов

У меня есть два dockerных контейнера с nginx. контейнер1 связан с контейнером2. Затем Docker добавляет запись в / etc / hosts, которую я ввел в конфигурацию nginx, например:

server { location ~ ^/some_url/(.*)$ { proxy_pass http://container1/$1; } } 

Я могу ping container1 из контейнера2 , но nginx не может его решить:

* 1 нет разрешения, разрешенного для разрешения контейнера1

Как я могу проксировать запрос в другой контейнер dockerов?

Вы должны взглянуть на этот ответ об использовании / 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; } } 

Используйте вместо восходящего блока вместо имени контейнера

 upstream backend { server container1; } server { location ~ ^/some_url/(.*)$ { proxy_pass http://backend/$1; } } 

Это должно допускать нормальное разрешение имен, предоставляя возможность легко использовать dockerы с nginx.

Вы можете использовать встроенную службу 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; } }