Overlay Networks in Docker: Building a Private Road Between Different Machines

Overlay Networks in Docker: Building a Private Road Between Different Machines

A complete, beginner-to-intermediate guide to what overlay networks are, how containers on entirely different physical machines end up talking to each other as if they were neighbors, and how to use this safely and effectively.

Imagine two office buildings on opposite sides of a city, each with its own internal hallway system. Normally, someone in one building has no direct way to walk to a room in the other — they’d have to go outside, cross public streets, and re-enter through a completely different entrance. Now imagine a private, covered walkway built specifically to connect the two buildings, so that walking from a room in one to a room in the other feels just as simple and direct as walking down a single hallway. A Docker overlay network is exactly that walkway, built between containers running on entirely separate physical or virtual machines. This guide explains, from the ground up, what that walkway actually is, how it’s built, and why it matters so much once an application grows beyond a single machine.

1The Problem Overlay Networks Solve

To understand overlay networks, first understand the limitation they exist to overcome.

Docker’s simplest, most common networking option connects containers running on the same single machine. Containers on that shared machine can find and talk to each other easily, by name, over a private network Docker sets up automatically. This works beautifully right up until an application needs to run across more than one machine at once — which happens constantly in real-world systems, whether for handling more traffic than a single machine can manage, or for resilience against any one machine failing.

The moment containers are split across separate physical or virtual machines, that simple, single-machine networking approach stops being enough. A container on Machine A has no built-in way to discover or reach a container on Machine B using the same easy, name-based approach it would use for a neighbor on its own machine. An overlay network exists specifically to close this gap, creating a single, unified private network that spans multiple separate machines, so containers on any of them can reach each other exactly as easily as if they shared one machine.

Simple Analogy

Think of each individual machine as its own small town, each with its own local phone exchange. Without an overlay network, a phone call from one town to another simply can’t be connected — the exchanges don’t know how to reach each other. An overlay network is like laying new long-distance phone lines between towns and updating every exchange so any number can be dialed from anywhere, regardless of which town the caller and receiver actually live in.

Single-Host Network

One Machine Only

A private network limited to containers running on the exact same physical or virtual machine.

Overlay Network

Spans Multiple Machines

A single, unified private network that connects containers across several separate machines as though they shared one.

Node

A Participating Machine

Any individual physical or virtual machine taking part in the overlay network.

Cluster

The Group of Nodes

The collection of machines working together, coordinated to run containers and share the overlay network between them.

2Where Overlay Networks Fit: Docker Swarm and Clusters

Overlay networks don’t operate in isolation — they’re a core piece of Docker’s approach to running applications across many machines together.

Overlay networks are most commonly used as part of Docker’s built-in clustering feature, which allows several machines to join together into a single coordinated group, letting containers be placed across any of them while still being managed as one unified system. When machines join this kind of cluster, an overlay network becomes available as a shared communication layer connecting containers regardless of which specific machine each one happens to be running on.

flowchart TB
    subgraph Cluster["Cluster of Machines"]
      direction LR
      N1["Machine A"]
      N2["Machine B"]
      N3["Machine C"]
    end
    N1 |"overlay network"| N2
    N2 |"overlay network"| N3
    N1 |"overlay network"| N3
    style N1 fill:#fafafa,stroke:#171717
    style N2 fill:#fafafa,stroke:#171717
    style N3 fill:#fef2f2,stroke:#dc2626
        
FIG 1 — An overlay network connects every machine in a cluster, letting containers on any of them communicate directly regardless of placement.

Without this clustering feature active, the concept of an overlay network spanning multiple machines largely doesn’t apply — it’s specifically designed to solve the coordination and connectivity challenges that appear once you’re managing containers across more than one machine as a single logical system, rather than manually operating several independent single-machine setups.

3How Overlay Networks Work Internally: Encapsulation

The real technical trick behind making separate machines feel like one shared network.

Physically, machines in a cluster are still connected only by their ordinary, everyday network — the same kind of network any computer uses to reach another. An overlay network doesn’t replace or bypass this underlying physical network; instead, it uses a technique called encapsulation to wrap up traffic meant for the private overlay network inside ordinary network traffic that the underlying physical network already knows how to deliver.

In effect, every message sent across the overlay network is placed inside an outer “envelope” addressed using the underlying physical network’s own addressing, allowing it to travel normally between machines. Once it arrives at the destination machine, that outer envelope is removed, revealing the original message exactly as it was meant to be delivered on the private overlay network — as though it had never left that private network at all.

sequenceDiagram
    participant C1 as Container on Machine A
    participant M1 as Machine A
    participant M2 as Machine B
    participant C2 as Container on Machine B

    C1->>M1: Send message to Container on Machine B
    M1->>M1: Wrap message in outer envelope (encapsulation)
    M1->>M2: Deliver envelope over ordinary physical network
    M2->>M2: Remove outer envelope
    M2->>C2: Deliver original message
        
FIG 2 — Encapsulation wraps overlay network traffic inside ordinary network traffic so it can travel across the underlying physical network unchanged.
Simple Analogy

Encapsulation is like putting a private, sealed letter inside a normal, publicly addressed shipping envelope. The postal service only ever sees and handles the outer, ordinary envelope, delivering it exactly as it would any other package. Only once it arrives does the recipient open the outer envelope to find the original private letter inside, completely unaffected by the journey.

4The Control Plane and the Data Plane

An overlay network is really two cooperating systems working together, each with a different job.

It’s useful to think of an overlay network as having two distinct layers of responsibility. The control plane is responsible for coordination — keeping every machine in the cluster informed about which containers exist, where they’re located, and how the overlay network’s addressing should be organized. The data plane is responsible for actually moving the real application traffic between containers, using the encapsulation technique described in Chapter 3.

LayerResponsibility
Control PlaneCoordinating knowledge — who exists, where they are, how addressing works
Data PlaneActually carrying application traffic between containers

This separation matters because it explains a common source of confusion: the control plane can be working perfectly, with every machine correctly aware of every container’s location, while a problem in the underlying physical network still prevents the data plane from successfully delivering traffic. Diagnosing an overlay network issue often means figuring out which of these two layers is actually the source of the trouble.

5How Machines Stay in Sync: Gossip-Based Coordination

Keeping every machine’s picture of the network up to date, without relying on one single point of failure.

For containers to find each other reliably across many machines, every machine in the cluster needs a reasonably up-to-date picture of what containers exist and where they currently live. Docker’s overlay networking achieves this using a coordination approach often described as “gossip,” where machines periodically share small updates about what they know with a handful of other machines, who in turn pass that information along further, spreading updates across the whole cluster gradually, without needing one single central machine to track everything itself.

Simple Analogy

This is similar to how news spreads informally through a large group of friends — you tell a couple of people directly, they each tell a couple more, and within a short time, the whole group knows, even though no single person had to personally inform everyone. It’s slower than a single announcement to the whole group at once, but it doesn’t depend on any one person being available and reachable.

i
Good to Know

This gossip-based approach to spreading information is part of why overlay networks can continue functioning reasonably well even if a portion of the cluster becomes temporarily unreachable — there’s no single, central coordination point whose failure would bring the entire network’s awareness to a halt.

6Service Discovery Across Machines

The genuinely useful outcome of everything described so far: containers finding each other by name, no matter where they are.

Just as containers on a single machine can reach each other by name over a simple network, containers connected by an overlay network can do exactly the same thing, transparently, across entirely different physical machines. A container doesn’t need to know or care which physical machine another container is actually running on — it simply refers to it by name, and the overlay network’s coordination layer handles figuring out where that name currently resolves to and routing traffic there correctly.

flowchart LR
    A["Container 'web' on Machine A"] -- "reaches by name: database" --> B["Container 'database' on Machine C"]
    style A fill:#fef2f2,stroke:#dc2626
    style B fill:#fafafa,stroke:#171717
        
FIG 3 — Name-based discovery works identically across an overlay network, regardless of which physical machine each container is actually placed on.

This is an enormously practical benefit in real, evolving systems: a container can be moved from one machine to another, for maintenance or rebalancing reasons, without any other service needing to be reconfigured, because the name it’s addressed by never actually changes, only the underlying physical location behind that name.

7The Ingress Network: A Special-Purpose Overlay

Not every overlay network is created by hand — one particular one is set up automatically for a very specific job.

When a cluster is first set up, Docker automatically creates a special, built-in overlay network dedicated specifically to handling incoming traffic from outside the cluster and routing it to the correct containers, regardless of which specific machine they’re currently running on. This is distinct from custom overlay networks you might create yourself to connect your own application’s services together internally.

Ingress Network

External Traffic Entry Point

An automatically created overlay network focused on routing incoming external requests to the right containers, wherever they’re placed.

Custom Overlay Network

Internal Application Networking

A network you create deliberately to connect your own application’s internal services across the cluster.

Understanding this distinction helps explain why, even in a cluster with no custom overlay networks defined at all, some cross-machine networking behavior is already present the moment external traffic starts arriving — the built-in ingress network is quietly doing that particular job by default.

8Security: Encrypted Overlay Networks

Because overlay traffic physically travels across real, potentially shared network infrastructure, encryption deserves serious consideration.

As explained in Chapter 3, overlay network traffic is encapsulated and sent over the underlying physical network connecting the cluster’s machines. Depending on that underlying physical network’s own security — whether it’s a fully private, trusted network or something more shared and exposed — the encapsulated traffic could potentially be observed by something with access to that underlying network, unless it’s specifically protected.

!
Serious Consideration

By default, traffic on an overlay network is not automatically encrypted. Docker does offer the option to create an overlay network with encryption specifically enabled, which protects the actual contents of application traffic as it crosses the underlying physical network between machines. For any cluster spanning machines connected over infrastructure that isn’t fully trusted, enabling this option is a serious security consideration, not an optional extra.

Encryption does come with a modest performance cost, since every piece of traffic now needs to be encrypted and decrypted as it crosses machine boundaries, which is why it’s offered as a deliberate, explicit choice rather than being forced on universally — the right decision depends on how trusted the underlying network genuinely is.

9Security: Network Isolation Between Overlay Networks

Multiple applications sharing the same cluster can be kept genuinely separate from one another.

A cluster can host several entirely separate applications at once, each defined with its own overlay network. Containers connected to one overlay network cannot, by default, reach containers on a different, separate overlay network, even though both are physically running across the exact same underlying set of machines. This isolation is a genuine security boundary, not merely an organizational convenience.

Advantages of This Isolation

  • Applications sharing a cluster can’t accidentally interfere with each other’s traffic
  • A compromised container is limited to the overlay network it’s actually connected to
  • Multiple teams can safely share the same underlying cluster infrastructure

Trade-offs to Plan For

  • Services that genuinely need to talk across applications must be deliberately connected together
  • More overlay networks to track and document as a cluster grows more complex

10Monitoring an Overlay Network

What’s worth watching once containers are spread across multiple machines rather than just one.

Monitoring an overlay network involves paying attention to a somewhat different set of signals than monitoring a single-machine network. Because traffic now genuinely crosses physical machine boundaries, factors like latency between machines, the health of the underlying physical network connecting them, and whether every machine’s coordination layer is properly in sync all become meaningfully relevant in a way they simply weren’t for a single-machine setup.

Latency
Time for traffic to cross machine boundaries
Sync Status
Whether every machine’s view of the network agrees
Reachability
Whether every node can actually reach every other node
i
Good to Know

A container appearing to be “running” and even reporting healthy, as discussed elsewhere regarding container states, doesn’t automatically guarantee the overlay network connecting it to other machines is functioning correctly. Overlay-specific monitoring — checking cross-machine reachability directly — is a genuinely distinct concern worth tracking on its own.

11Overlay Networks vs. Bridge Networks

Understanding when each type of network is genuinely the right tool.

A bridge network — Docker’s simpler, single-machine networking option — and an overlay network solve fundamentally different scopes of problem, even though both give containers a way to reach each other by name over a private network.

AspectBridge NetworkOverlay Network
ScopeA single machine onlySpans multiple machines in a cluster
Setup ComplexitySimple, minimal coordination neededRequires cluster coordination and encapsulation
Typical UseLocal development, single-machine applicationsDistributed applications spread across many machines
PerformanceSlightly lower overheadModest overhead from encapsulation and coordination

Choosing between them isn’t really a matter of one being better than the other in general — it’s a matter of matching the tool to the actual scope of the problem. An application genuinely confined to a single machine gains nothing from the added coordination of an overlay network, while an application genuinely spread across multiple machines simply cannot function correctly with a bridge network alone.

12Design Patterns for Organizing Overlay Networks

A few recurring, sensible ways teams structure overlay networks in real, growing systems.

One Overlay Network per Application

Each independent application gets its own dedicated overlay network, keeping its internal service-to-service traffic cleanly isolated from every other application sharing the cluster, as discussed in Chapter 9.

A Shared Overlay Network for Genuinely Cross-Cutting Services

A small number of services that legitimately need to be reached by many different applications — a shared logging or monitoring service, for instance — are placed on a separate, deliberately shared overlay network, rather than connecting every application’s private network directly together.

Encryption Reserved for Sensitive Traffic

Rather than encrypting every overlay network by default, teams often reserve the encryption option described in Chapter 8 specifically for networks carrying genuinely sensitive traffic, balancing security needs against the added performance overhead.

13Best Practices and a Common Anti-Pattern

A short set of habits that separate a well-organized overlay networking setup from a fragile, confusing one.

1

Keep unrelated applications on separate overlay networks

Preserving the isolation described in Chapter 9, rather than convenience-connecting everything onto one shared network.

2

Enable encryption on any overlay network crossing untrusted infrastructure

Treat this as a deliberate security decision, weighed against the underlying network’s actual trustworthiness, as discussed in Chapter 8.

3

Monitor cross-machine reachability directly

Don’t rely solely on individual container health, as explained in Chapter 10 — check the network layer connecting machines too.

4

Document which overlay network each service belongs to

As a cluster grows to host more applications, a clear map of networks prevents accidental confusion or misconfiguration.

ANTI-PATTERN-01 Avoid
Problem

A team connects every application running in a shared cluster to one single, large overlay network, simply because it was the easiest way to get everything talking to everything else quickly.

Why It’s Harmful

As explained in Chapter 9, this eliminates the meaningful isolation overlay networks are capable of providing. A problem or a compromise in one application’s containers now has a direct, unrestricted path to every other application sharing that same overly broad network, turning a genuine security boundary into a single, shared blast radius.

Correct Approach

Give each application its own dedicated overlay network by default, and only deliberately connect specific services across networks when there’s a genuine, well-understood reason for them to communicate.

14Real-World and Industry Examples

Overlay networking underpins a wide range of real, distributed systems across many industries.

E-Commerce

Multi-Machine Storefronts

A storefront application spread across several machines for resilience and capacity, with its internal services communicating seamlessly over a dedicated overlay network regardless of which machine each is running on.

Financial Services

Encrypted Internal Traffic

Organizations handling sensitive financial data commonly enable overlay network encryption, described in Chapter 8, as a standard part of their security posture across clustered infrastructure.

SaaS Platforms

Isolated Multi-Application Clusters

Platforms hosting several distinct internal applications on one shared cluster rely on separate overlay networks per application, as discussed in Chapter 9, to keep them properly isolated from one another.

Media Streaming

Distributed Processing Pipelines

Video processing pipelines split across many machines use overlay networking to let each stage of the pipeline find and communicate with the next, no matter which machine actually happens to be running it.

15Frequently Asked Questions

Q1Do I need an overlay network if my application only ever runs on one machine?

No. As explained in Chapter 1, overlay networks specifically solve cross-machine communication; a single-machine application is well served by a simpler bridge network, as compared in Chapter 11.

Q2Is overlay network traffic encrypted by default?

No — as covered in Chapter 8, encryption is an optional, explicit setting, worth enabling deliberately whenever the underlying physical network isn’t fully trusted.

Q3Can containers on two different overlay networks talk to each other by default?

No — as explained in Chapter 9, overlay networks provide genuine isolation from one another unless a service is deliberately connected to more than one.

Q4What’s the difference between the ingress network and a custom overlay network?

As discussed in Chapter 7, the ingress network is automatically created to handle external traffic entering the cluster, while a custom overlay network is one you define yourself for internal application communication.

Q5Does moving a container to a different machine break its overlay network connections?

No — as explained in Chapter 6, name-based discovery on an overlay network works regardless of which machine a container currently occupies, so other services don’t need reconfiguring.

Q6How does an overlay network keep working if one machine becomes unreachable?

The gossip-based coordination approach described in Chapter 5 doesn’t rely on a single central point, allowing the rest of the cluster’s shared awareness to keep functioning reasonably well despite one machine being temporarily unreachable.

16Summary and Key Takeaways

An overlay network solves a problem that only appears once an application grows beyond a single machine: letting containers on entirely separate physical machines discover and communicate with each other as effortlessly as if they were sitting side by side. It achieves this by encapsulating private overlay traffic inside the ordinary network traffic the underlying physical infrastructure already knows how to deliver, coordinated through a gossip-based system that keeps every machine’s picture of the network reasonably up to date without depending on one single point of failure. Understanding its control and data planes, its isolation properties, its optional encryption, and how it differs from a simple single-machine bridge network is essential for building distributed applications that stay genuinely connected, secure, and understandable as they scale across many machines.

Key Takeaways

  • Overlay networks connect containers across separate machines — solving a problem single-machine bridge networks simply can’t address.
  • Encapsulation is the core mechanism — private overlay traffic travels wrapped inside the ordinary underlying network’s traffic.
  • The control and data planes handle different jobs — coordination versus actually moving application traffic.
  • Gossip-based coordination avoids a single point of failure — knowledge spreads gradually across the whole cluster.
  • Name-based discovery works across machines transparently — a container can move without breaking who can reach it.
  • Encryption is optional but important for untrusted infrastructure — enabled deliberately, not on by default.
  • Separate overlay networks provide real isolation — a security boundary worth preserving between unrelated applications.