I am trying to get rid of deprecated Docker links in my configuration. What's left is getting rid of those Bad Gateway
nginx reverse proxy errors when I recreated a container.
Note: I am using Docker networks in bridge mode. (docker network create nettest
)
I am using the following configuration snippet inside nginx:
location / {
resolver 127.0.0.1 valid=30s;
set $backend "http://confluence:8090";
proxy_pass $backend;
confluence
on my Docker network with name nettest
. nettest
.confluence
from inside the nginx containerconfluence
is listed inside the nginx container's /etc/hosts
filesend() failed (111: Connection refused) while resolving, resolver: 127.0.0.1:53
127.0.0.11
from /etc/resol.conf
confluence could not be resolved (3: Host not found)
Anybody knows how to configure nginx resolver with Docker Networks or an alternative on how to force Nginx to correctly resolve the Docker network hostname?
First off, you should be using the Docker embedded DNS server at 127.0.0.11
.
Your problem could be caused by 1 of the following:
nginx is trying to use IPv6 (AAAA record) for the DNS queries.
See https://stackoverflow.com/a/35516395/1529493 for the solution.
Basically something like:
http {
resolver 127.0.0.11 ipv6=off;
}
This is probably no longer a problem with Docker 1.11:
Fix to not forward docker domain IPv6 queries to external servers (#21396)
Take care that you don't accidentally override the resolver
configuration directive. In my case I had in the server
block resolver 8.8.8.8 8.8.4.4;
from Mozilla's SSL Configuration Generator, which was overriding the resolver 127.0.0.11;
in the http
block. That had me scratching my head for a long time...