Sign inSign up

zachbg/docker-dns

By zachbg

•Updated 6 months ago

Automatic DNS for all Docker containers - access any container by name

Image
1

1.7K

zachbg/docker-dns repository overview

⁠Docker DNS

Automatic DNS for Docker containers. Access any container by name: curl http://myapp.docker instead of hardcoding IPs or relying on Docker's internal DNS.

⁠Why?

Docker's built-in DNS only works within the same Compose network. Cross-network, cross-project, and host-to-container DNS doesn't exist. You end up hardcoding IPs or creating massive shared networks. Docker-dns solves this by running a local DNS server that automatically resolves container names to IPs.

⁠Quick Start

services:
  dns:
    image: zachbg/docker-dns:latest
    restart: unless-stopped
    ports:
      - "53:53/udp"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      DNS_DOMAIN: docker

Then configure your system to use it:

macOS:

sudo mkdir -p /etc/resolver
echo "nameserver 127.0.0.1" | sudo tee /etc/resolver/docker

Linux: Add to /etc/resolv.conf:

nameserver 127.0.0.1

Now: curl http://myapp.docker, ping postgres.docker, dig redis.docker

⁠Environment Variables

VariableDefaultDescription
DNS_DOMAINdockerDomain suffix (e.g., .docker, .local, .dev)
DNS_UPSTREAM8.8.8.8Upstream DNS for non-Docker queries
DNS_TTL60Cache TTL in seconds
DNS_SYNC_INTERVAL5Seconds between container scans
DNS_LOG_QUERIESfalseLog all DNS queries
DNS_LABELOnly resolve labeled containers

⁠Container Labels

LabelDescription
dns.hostname=myappCustom hostname (instead of container name)

⁠How It Works

  1. Watches Docker for running containers
  2. Maps container names to their IPs
  3. Serves DNS queries via dnsmasq
  4. Auto-updates when containers start/stop

⁠Examples

⁠Custom domain
environment:
  DNS_DOMAIN: dev
# Access: myapp.dev, postgres.dev, redis.dev
⁠Custom hostnames via labels
services:
  webapp:
    image: nginx
    labels:
      dns.hostname: "app"
# Access: app.docker
⁠Only resolve labeled containers
services:
  dns:
    image: zachbg/docker-dns:latest
    environment:
      DNS_LABEL: "dns.enable"

  webapp:
    image: nginx
    labels:
      dns.enable: "true"
# Only webapp gets DNS, other containers are ignored
⁠Cross-project resolution
# Project A (docker compose -p projecta up)
projecta-web-1.docker -> 172.18.0.2

# Project B (docker compose -p projectb up)
projectb-api-1.docker -> 172.19.0.3

# From your host:
curl http://projecta-web-1.docker
curl http://projectb-api-1.docker

Tag summary

Content type

Image

Digest

sha256:8395364fa…

Size

14.6 MB

Last updated

6 months ago

docker pull zachbg/docker-dns