How to assign a static IP to a docker container

A static IP address is simply an address that doesn’t change. Once your device is assigned a static IP address, that number typically stays the same until the device is decommissioned or your network architecture changes. Static IP addresses generally are used by servers or other important equipment.

The static IP addresses allow don’t change when containers or services are stopped and started, making them useful for permanent networking. Assigning Docker containers static IP addresses is an easy way to make them more accessible.

Why Use a Static IP?

There are two kinds of “static IP”:

  • private IP addresses used for internal networking inside a server;
  • public IP addresses used to connect outside the server, often over the internet.

If you need to set up a public IP address for a container, you’ll want to use port bindings. You can “publish” ports on the Docker container to be accessible from the host. While there are more advanced networking setups, this is by far the easiest and most common. For example, binding port 80 (HTTP) on the host to point to an NGINX container:

docker run --publish=80:8080 nginx

If you want to make a static private IP address, you should consider if you need to use one at all. Most of the time, you’ll want a static IP to talk to one container from another or the host. In most cases, Docker’s built-in networking can handle this.
Docker comes with a default network, but if you make your own, you can give container aliases when launched in that network. This alias will resolve to the container’s private IP automatically.

To learn more, you can read Docker’s documentation on user-defined bridge networks.

However, there are still plenty of times when you’ll want to manually specify a private IP address, such as accessing containers directly from the host. You’ll still need to use a custom Docker network to do so, but it’s easy to set up.

Setting Up Static IPs

First, you’ll need to set up a Docker network, and since we care about the IP address, you’ll need to specify a fixed subnet:

docker network create --subnet= custom_network

Then, you can run a container, specifying the network with the --net flag, and specifying the IP with the -ip flag:

docker run --net custom_network --ip -d container

You can verify the address is correct by checking it in container with exec -t bin/bash, or by inspecting the Docker container list:

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' name_or_id

Using Docker Compose

Docker Compose is a tool used to launch multiple containers with predefined settings. This includes setting up networks with specific subnets, and you can attach containers to networks with fixed IPs using the ipv4_address config block shown here:

version: '3'
    image: nginx
    container_name: web-server
        - subnet: