Home > Software engineering >  How do I make host.docker.internal work with custom dns configuration enabled?
How do I make host.docker.internal work with custom dns configuration enabled?

Time:08-30

I have docker compose running with several containers. One of those containers is a dns server running bind. In my docker daemon configuration I specify the dns like this:

"dns" : [
  "10.1.1.8", /* static ip address of my dockerized bind container defined in compose */
  "x.x.x.x", /* my companies internal vpn dns */
  "8.8.8.8" /* google dns */
]

This all works fine. My containers in the compose file will use the bind server running on 10.1.1.8 for dns lookup and then fall back on my companies internal dns and lastly googles dns for external websites.

Docker provides a special dns host.docker.internal which should point at the host IP (lets say you want docker containers to connect to services running locally but not on docker). I want to use this in a few containers which should allow the container to reference the host IP address without hardcoding an IP which can change. In fact docker inserts this value into the hosts file (windows/system32/driver/etc/host) on the host operating system and updates it when you host IP gets assigned a new dns.

The issue is docker uses dns to resolve "host.docker.internal". When using my custom dns configuration in the daemon it breaks things and I get issues reaching the host os service. I spent 2 hours debugging this issue till I realized host.docker.internal starts working only when I delete the dns configuration from the daemon config. Is there any way to make docker resolve the dns correctly and still use custom dns bind server on the same machine? Can I somehow update the daemon dns to also point at some docker dns ip address?

CodePudding user response:

Have you considered to rely on Docker Compose and how it helps defining custom DNS addressing policies.

I provide you the link to the Compose DNS configuration official guide.

  • Related