← Back to Questions
Docker

What is Docker DNS?

Learn What is Docker DNS? with simple explanations, real-time examples, interview tips and practical use cases.

What is Docker DNS?

Docker DNS is Docker’s built-in service discovery mechanism that allows containers to communicate with each other using container names instead of hardcoded IP addresses.

In modern Docker, Kubernetes, microservices, and cloud-native architectures, Docker DNS plays a critical role in enabling scalable and dynamic container communication.

Simple Definition: Docker DNS automatically resolves container names and service names to container IP addresses inside Docker networks.

Why Docker DNS is Important

Containers receive dynamic IP addresses.

Example:

mysql container:
172.18.0.2

payment-service container:
172.18.0.3
    

If containers restart:

  • IP addresses may change
  • Hardcoded IPs become invalid
  • Applications fail to communicate

Docker DNS solves this problem using automatic service discovery.

“Use service names, not container IP addresses.”

Real-Time Production Example

Consider a global learning platform serving users from USA, UK, and India.

Microservices:

API Gateway
Payment Service
Interview Service
Notification Service
MySQL
Redis
    

Instead of:

jdbc:mysql://172.18.0.2:3306/payment_db
    

applications use:

jdbc:mysql://mysql:3306/payment_db
    

Docker DNS resolves:

mysql
    

to the correct container IP automatically.

How Docker DNS Works Internally

Container Requests:
mysql
      |
      v
Docker Internal DNS Server
      |
      v
Resolve Container IP
      |
      v
Return:
172.18.0.2
    

Docker DNS Architecture

+------------------------------------------------------+
|                Docker Network                        |
|                                                      |
|  +----------------------------------------------+    |
|  | Docker Internal DNS                         |    |
|  |                                              |    |
|  | mysql -> 172.18.0.2                         |    |
|  | redis -> 172.18.0.3                         |    |
|  | payment-service -> 172.18.0.4              |    |
|  +----------------------------------------------+    |
|                                                      |
+------------------------------------------------------+
    

When Docker DNS Works

Docker DNS works automatically on:

  • User-defined bridge networks
  • Docker Compose networks
  • Overlay networks

It does NOT fully work on the default bridge network the same way.

Creating User-Defined Network

docker network create app-network
    

Start Containers

docker run -d \
  --name mysql \
  --network app-network mysql

docker run -d \
  --name payment-service \
  --network app-network payment-service
    

Communication Using Docker DNS

payment-service can connect using:

mysql:3306
    

Docker internally resolves:

mysql
    

to:

172.18.0.2
    

Internal DNS Resolution Flow

payment-service
       |
       v
Requests "mysql"
       |
       v
Docker Embedded DNS
       |
       v
Returns:
172.18.0.2
       |
       v
Connects to MySQL Container
    

Docker Embedded DNS Server

Docker includes an embedded DNS server inside user-defined networks.

Containers automatically use:

127.0.0.11
    

as internal DNS resolver.

Check DNS Configuration Inside Container

docker exec -it payment-service cat /etc/resolv.conf
    

Example Output

nameserver 127.0.0.11
options ndots:0
    

This is Docker’s embedded DNS server.

Container Name vs Hostname

Docker DNS resolves:

  • Container names
  • Service names
  • Network aliases

Example Using Hostname

docker run -d \
  --hostname payment-api \
  --network app-network payment-service
    

Other containers can use:

payment-api
    

for communication.

Network Aliases

Docker supports aliases for services.

Example

docker network connect \
  --alias database \
  app-network mysql
    

Other containers can use:

database
    

to access MySQL.

Docker Compose and DNS

Docker Compose automatically creates DNS entries for services.

Example

services:

  mysql:
    image: mysql

  payment-service:
    image: payment-service
    

payment-service accesses MySQL using:

mysql:3306
    

Spring Boot Production Example

spring.datasource.url=jdbc:mysql://mysql:3306/payment_db
    

Here:

mysql
    

is resolved using Docker DNS.

Docker DNS vs Traditional DNS

Feature Traditional DNS Docker DNS
Scope Internet/global Docker network internal
Purpose Resolve domains Resolve containers/services
Dynamic updates Slower Automatic
Use case Public websites Container communication

How Docker DNS Handles Container Restart

Suppose MySQL container restarts:

Old IP:
172.18.0.2

New IP:
172.18.0.5
    

Docker DNS automatically updates mapping:

mysql -> 172.18.0.5
    

Applications continue working without configuration changes.

Docker DNS and Microservices

Docker DNS is essential in microservices architecture.

API Gateway
      |
      v
payment-service
      |
      v
notification-service
      |
      v
mysql
    

All services communicate using logical service names.

Docker DNS in Kubernetes

Kubernetes extends Docker DNS concepts further.

payment-service.default.svc.cluster.local
    

Kubernetes provides:

  • Cluster-wide DNS
  • Service discovery
  • Load balancing
  • Cross-node communication

Docker DNS Resolution Example

Inside Container

ping mysql
    

Docker DNS Response

PING mysql (172.18.0.2)
    

How Docker DNS Uses Linux Networking

Internally Docker DNS works with:

  • Linux namespaces
  • Virtual Ethernet interfaces
  • iptables
  • Docker bridge networks
  • Internal DNS server

Container Communication Flow

Container A
     |
Requests:
mysql
     |
Docker DNS
     |
Returns:
172.18.0.2
     |
Connects to MySQL
    

Production Networking Example

Frontend
    |
API Gateway
    |
    +------------------------------+
    |              |               |
    v              v               v
Payment      Interview      Notification
Service       Service         Service
    |
    v
MySQL
    

All communication occurs using Docker DNS service names.

Docker DNS Advantages

  • No hardcoded IP addresses
  • Automatic service discovery
  • Dynamic container handling
  • Scalable microservices communication
  • Easier configuration management

Production Best Practices

  1. Use user-defined bridge networks
  2. Use service names instead of IPs
  3. Use Docker Compose networking
  4. Avoid default bridge network
  5. Use meaningful service names
  6. Separate frontend/backend networks

Security Best Practices

  • Use isolated internal networks
  • Do not expose databases publicly
  • Use network segmentation
  • Restrict cross-service communication
  • Use TLS encryption

Common Docker DNS Problems

  • Containers not on same network
  • Wrong service names
  • DNS caching issues
  • Network misconfiguration
  • Firewall restrictions

How to Debug Docker DNS

List Networks

docker network ls
    

Inspect Network

docker network inspect app-network
    

Ping Service

docker exec -it payment-service ping mysql
    

Check DNS Resolution

docker exec -it payment-service nslookup mysql
    

Check resolv.conf

docker exec -it payment-service cat /etc/resolv.conf
    

Docker DNS and Scaling

Docker DNS supports dynamic scaling.

When containers scale:

payment-service-1
payment-service-2
payment-service-3
    

DNS helps service discovery remain dynamic and manageable.

Docker DNS vs Hardcoded IPs

Feature Hardcoded IP Docker DNS
Dynamic scaling Poor Excellent
Maintainability Difficult Easy
Container restart support Breaks easily Automatic
Production readiness Low High

Interview Answer

Docker DNS is Docker’s built-in service discovery mechanism that automatically resolves container names and service names to container IP addresses within Docker networks.

Instead of using hardcoded IP addresses, containers communicate using logical names like mysql or payment-service. Docker internally runs an embedded DNS server that dynamically maps service names to container IPs.

Docker DNS is widely used in Docker Compose, microservices architecture, Kubernetes, CI/CD pipelines, and cloud-native production systems.

Quick Summary Table

Concept Description
Docker DNS Internal container name resolution
Service Discovery Automatic container lookup
Resolver Address 127.0.0.11
Best Practice Use service names instead of IPs
Production Usage Microservices communication

Useful Internal Links

Final Conclusion

Docker DNS is a foundational feature that enables scalable, maintainable, and dynamic container communication. It eliminates the need for hardcoded IP addresses by providing automatic service discovery inside Docker networks.

In production microservices architectures, Docker DNS simplifies communication between services, improves scalability, and enables cloud-native distributed systems to operate efficiently across Docker, Kubernetes, and enterprise DevOps platforms.

Why this Docker question is important?

This interview question helps candidates understand real-time backend development concepts, practical problem solving, coding fundamentals, system design basics and production-ready application behavior.

Practice this question carefully for Java backend roles, Spring Boot developer interviews, microservices interviews, company interviews and full-stack developer preparation.

About the Author

Naresh Kumar is a Senior Java Backend Engineer with experience building enterprise applications using Java, Spring Boot, Microservices, Docker, Kubernetes and Cloud technologies.