Docker DNS & Service Discovery
Docker provides built-in DNS for container name resolution.
Automatic DNS
User-Defined Networks
# Create network
docker network create mynet
# Run containers
docker run -d --name web --network mynet nginx
docker run -d --name api --network mynet myapi
# Containers can resolve each other by name
docker exec api ping web
# Resolves to web container's IPDNS Resolution Order
- Container's /etc/hosts
- Docker's embedded DNS server (127.0.0.11)
- External DNS servers
Configuring DNS
Container-Level
# Set DNS servers
docker run --dns 8.8.8.8 --dns 8.8.4.4 alpine
# Set DNS search domain
docker run --dns-search example.com alpine
# Set hostname
docker run --hostname mycontainer alpineDaemon-Level
// /etc/docker/daemon.json
{
"dns": ["8.8.8.8", "8.8.4.4"],
"dns-search": ["example.com"]
}Docker Compose DNS
version: '3.8'
services:
web:
image: nginx
# Automatically gets DNS name "web"
networks:
- backend
api:
image: myapi
# Can resolve "web" hostname
depends_on:
- web
networks:
- backend
db:
image: postgres
# Service name "db" is DNS resolvable
networks:
- backend
networks:
backend:
driver: bridgeService Aliases
services:
database:
image: postgres
networks:
backend:
aliases:
- db
- postgres
- primary-db# All these resolve to same container
ping database
ping db
ping postgres
ping primary-dbExternal DNS Resolution
# Verify DNS resolution
docker run --rm alpine nslookup google.com
# Check configured DNS
docker run --rm alpine cat /etc/resolv.confTroubleshooting
# Check DNS server in container
docker exec mycontainer cat /etc/resolv.conf
# Test DNS resolution
docker run --network mynet busybox nslookup web
# Debug with netshoot
docker run -it --network mynet nicolaka/netshoot
> dig web
> nslookup apiDNS Round-Robin
# Multiple containers with same alias
docker run -d --name web1 --network mynet --network-alias web nginx
docker run -d --name web2 --network mynet --network-alias web nginx
# "web" resolves to both IPs (round-robin)
docker run --rm --network mynet alpine nslookup webBest Practices
| Practice | Recommendation |
|---|---|
| Use user networks | Default bridge has no DNS |
| Meaningful names | Container names become DNS |
| Aliases for flexibility | Multiple DNS names per container |
| Health checks | Ensure services ready before resolution |
- docker
- dns
- service discovery
- networking
- containers