In recent years, containers have become a popular way to deploy applications and services. They are lightweight, fast, and easy to manage. However, when you create a container with a static IP address, you may face some challenges. For one, your container will not be able to access the internet. This is because your container has been created with an IP address that is specific to your local network. If you want your container to be accessible from the internet, you will need to set up a networking environment for it or use another solution. Another challenge is that your container will not be able to run any applications that require a specific IP address or port number. This is because those applications are built for containers and not for general use. You will need to find an application that uses a specific IP address or port number and install it into your container using one of the many available solutions.
Static IP addresses 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, and 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:
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 from 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 containers aliases when launched in that network. This alias will resolve to the container’s private IP automatically. For example, the NGINX container here can access the MongoDB instance with the connection string mongodb://mongohost:27017.
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:
RELATED: What are Subnets, and How Do They Affect My Network?
Then, you can run a container, specifying the network with the –net flag, and specifying the IP with the -ip flag:
You caan verify the address is correct by checking it in container with exec -t bin/bash, or by inspecting the Docker container list:
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: