How to change docker ip address

Have you ever found yourself troubleshooting strange network conflicts or security issues in your Docker environment?
I certainly have — and more often than not, changing Docker’s default IP address turns out to be the key fix.

Whether you’re dealing with IP overlaps between Docker and your local LAN, configuring complex multi-container stacks, or simply looking to gain finer control over container networking, understanding and customizing Docker’s IP configuration is a must-have skill for developers, DevOps engineers, and system administrators alike.

In this guide, we’ll explore:

  • Why you might want to change Docker’s IP range

  • How Docker’s default networking model works

  • Multiple methods for customizing your IP address configuration

  • Troubleshooting common pitfalls and best practices

Let’s dive in 🚀


🧠 Understanding Docker’s Default Networking Model

When Docker is installed, it automatically creates a few built-in network types:

Network Description
bridge The default network for standalone containers. Usually assigned IPs from 172.17.0.0/16.
host Shares the host’s network stack directly. No network isolation.
none Disables networking entirely for containers.

Most containers you run are attached to the default bridge network unless otherwise specified.
That’s why you’ll often see container IPs like 172.17.0.x when you run docker inspect or docker network inspect bridge.

The default bridge works fine for simple setups — but if you have overlapping subnets (e.g., your corporate LAN also uses 172.17.0.0/16), containers may become unreachable. That’s when changing Docker’s IP range becomes essential.


🔧 Method 1: Changing Docker’s Default Bridge Network Subnet

To modify Docker’s default bridge network, you need to edit the Docker daemon configuration file.

  1. Create or update /etc/docker/daemon.json:

     
    { "default-address-pools": [ { "base": "192.168.0.0/16", "size": 24 } ] }
  2. Restart the Docker daemon to apply the change:

     
    sudo systemctl restart docker

This configuration tells Docker to allocate subnets from the 192.168.0.0/16 range, each with a /24 mask — for example, 192.168.1.0/24, 192.168.2.0/24, and so on.

Pro tip:
If you work in environments with VPNs or multiple Docker hosts, choose a non-overlapping private range (e.g., 10.100.0.0/16) to minimize conflict risk.


🏗️ Method 2: Creating Custom Bridge Networks (Recommended)

Rather than modifying the default bridge, it’s often cleaner and safer to create custom bridge networks with your own subnets.

Example:

 
docker network create --subnet=10.10.0.0/16 --gateway=10.10.0.1 my_custom_network

When running containers, attach them to your custom network:

 
docker run --network=my_custom_network --ip=10.10.0.2 -d nginx

This approach gives you precise control over container IPs and keeps configurations isolated between projects.

Why it’s better:

  • Custom networks persist independently of the Docker service

  • They prevent conflicts between containers from different projects

  • You can reuse and version-control them in scripts or Compose files


♻️ Method 3: Changing the IP of a Running Container

Docker doesn’t allow modifying a container’s IP while it’s running.
To change it, you’ll need to recreate the container:

 
docker stop my_container docker rm my_container docker run --name my_container --network=my_custom_network --ip=10.10.0.5 -d my_image

If your container stores persistent data, make sure it uses Docker volumes or bind mounts so you don’t lose data during recreation.


🧩 Method 4: Using Docker Compose for IP Management

When managing multi-container applications, Docker Compose provides a clean, declarative way to define networks and assign static IPs.

Here’s a sample docker-compose.yml:

 
version: '3' networks: app_net: ipam: driver: default config: - subnet: 172.28.0.0/16 gateway: 172.28.0.1 services: web: image: nginx networks: app_net: ipv4_address: 172.28.1.1 database: image: postgres networks: app_net: ipv4_address: 172.28.1.2

Run it with:

 
docker compose up -d

Now each service has a predictable IP address, which is especially helpful when configuring inter-container communication, such as database connections or service discovery.


🧭 Troubleshooting Common IP Configuration Issues

Changing Docker’s IP setup can sometimes introduce new challenges.
Here are the most common ones — and how to fix them:

⚠️ 1. Network Conflicts

  • Symptom: Containers lose connectivity or can’t resolve hostnames.

  • Fix: Make sure your chosen subnet (e.g., 10.10.0.0/16) doesn’t overlap with:

    • Your host machine’s LAN

    • VPN-assigned ranges

    • Other Docker networks (check with docker network ls and docker network inspect)

🧩 2. Hardcoded IPs in Configs

If your app references container IPs directly, update them after any IP change.
Better yet — use container names or service names for inter-container communication. Docker’s internal DNS automatically resolves them.

🔁 3. Changes Not Taking Effect

Remember that changes to /etc/docker/daemon.json require a Docker restart, not just a container restart.


🧰 Useful Commands for Network Debugging

Here are some quick commands to help inspect your Docker networking setup:

 
# List all Docker networks docker network ls # Inspect details of the default bridge docker network inspect bridge # Show a container’s IP and network info docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name

These are invaluable when verifying that your configuration is working as expected.


✅ Conclusion: Take Control of Your Docker Networking

Changing Docker’s IP address might sound like a small tweak, but it can dramatically improve your infrastructure’s stability, security, and predictability.

By understanding how Docker assigns IPs — and by customizing them through daemon settings, custom bridge networks, or Compose files — you gain the flexibility to:

  • Prevent network overlaps

  • Create isolated environments for projects

  • Simplify troubleshooting and deployments

Always test changes in a non-production environment first, and document your chosen subnets to avoid future conflicts.

Have you ever had to deal with a Docker networking issue or subnet conflict?
Share your story in the comments — I’d love to hear how you solved it!

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top