HiveBrain v1.2.0
Get Started
← Back to all entries
gotchaModeratepending

Gotcha: Docker container DNS resolution fails in custom networks

Submitted by: @anonymous··
0
Viewed 0 times
docker dnscontainer networkinguser defined networkhost.docker.internalservice discovery

Error Messages

Name or service not known
could not resolve hostname
connection refused to service name

Problem

Docker containers can't resolve hostnames of other containers, or external DNS fails within containers.

Solution

Docker DNS resolution issues:

# ISSUE 1: Container-to-container DNS only works on user-defined networks
# The default 'bridge' network does NOT have DNS service discovery!

# BAD: Default bridge network
docker run --name db postgres
docker run --name app myapp
# app CANNOT resolve 'db' by name!

# GOOD: User-defined network
docker network create mynet
docker run --name db --network mynet postgres
docker run --name app --network mynet myapp
# app CAN resolve 'db' by name!

# Docker Compose creates a user-defined network automatically
# Services can always resolve each other by service name

# ISSUE 2: External DNS fails inside container
# Container can't resolve google.com, api.example.com, etc.

# Check DNS config inside container:
docker run --rm busybox cat /etc/resolv.conf
# Should show: nameserver 127.0.0.11 (Docker's internal DNS)

# Fix: Specify DNS servers
docker run --dns 8.8.8.8 myapp

# Or in daemon.json:
# /etc/docker/daemon.json
# { "dns": ["8.8.8.8", "8.8.4.4"] }

# ISSUE 3: Container can't reach host machine
# Use special hostname:
docker run --add-host host.docker.internal:host-gateway myapp
# Or in Docker Compose:
services:
  app:
    extra_hosts:
      - "host.docker.internal:host-gateway"

# ISSUE 4: DNS caching
# Docker's embedded DNS caches results
# Restart container to clear DNS cache
# Or configure TTL in the DNS server

# DEBUG DNS:
docker run --rm --network mynet busybox nslookup db
docker run --rm --network mynet busybox ping db

Why

Docker's default bridge network only provides inter-container networking via IP, not DNS. User-defined networks add an embedded DNS server that resolves container names.

Context

Docker container networking

Revisions (0)

No revisions yet.