Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to assign static public IP to docker container

Tags:

docker

Is there any way to assign the static public IP to the container. So the container has the public IP. Client can access to container with the IP.

like image 870
firelyu Avatar asked Jan 09 '16 01:01

firelyu


Video Answer


2 Answers

This should now be possible with docker 1.10 and the new docker run --ip option that you now see in docker network connect.

If specified, the container's IP address(es) is reapplied when a stopped container is restarted. If the IP address is no longer available, the container fails to start.

One way to guarantee that the IP address is available is to specify an --ip-range when creating the network, and choose the static IP address(es) from outside that range. This ensures that the IP address is not given to another container while this container is not on the network.

$ docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 multi-host-network  $ docker network connect --ip 172.20.128.2 multi-host-network container2 

See also Jessie Frazelle's blog post "IPs for all the Things", and pull request docker/docker#19001.

like image 182
VonC Avatar answered Nov 09 '22 03:11

VonC


With currently released versions of Docker this isn't possible (without a lot of manual work behind Docker's back), although it is seldom necessary.

Docker exposes network services in containers through the use of port mappings, and port mappings can bind to specific ip addresses on your host. So if you want to have one web server at 192.168.10.10 and another webserver at 192.168.10.20, first make sure this addresses are available on your host:

ip addr add 192.168.10.10/24 dev eth0 ip addr add 192.168.10.20/24 dev eth0 

Then start the first container:

docker run -p 192.168.10.10:80:80 mywebserver 

And finally start the second container:

docker run -p 192.168.10.20:80:80 mywebserver 

In the above commands, the -p option is used to bind the port mapping to a particular ip address. Now you have two containers offering a service on the same port (port 80) but on different ip addresses.

like image 30
larsks Avatar answered Nov 09 '22 05:11

larsks