如何将静态公共IP分配给docker容器

时间:2016-01-09 01:58:43

标签: docker

有没有办法将static public IP分配给容器。所以容器有公共IP。客户可以使用IP访问容器。

3 个答案:

答案 0 :(得分:25)

现在应该可以使用docker 1.10和new docker run --ip option中显示的docker network connect

  

如果指定,则在重新启动已停止的容器时重新应用容器的IP地址。如果IP地址不再可用,则容器无法启动。

     

保证IP地址可用的一种方法是在创建网络时指定--ip-range,并从该范围外选择静态IP地址。这可确保在此容器不在网络上时,不会将IP地址提供给另一个容器。

$ 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

另请参阅Jessie Frazelle的博文“IPs for all the Things”,并提取请求docker/docker#19001

答案 1 :(得分:20)

对于目前发布的Docker版本,这是不可能的(没有很多手动工作在Docker后面),尽管很少需要。

Docker通过使用端口映射在容器中公开网络服务,端口映射可以绑定到主机上的特定IP地址。因此,如果您想在192.168.10.10拥有一个网络服务器而在192.168.10.20拥有另一个网络服务器,请首先确保您的主机上有此地址:

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

然后启动第一个容器:

docker run -p 192.168.10.10:80:80 mywebserver

最后启动第二个容器:

docker run -p 192.168.10.20:80:80 mywebserver

在上面的命令中,-p选项用于将端口映射绑定到特定的ip地址。现在,您有两个容器在同一端口(端口80)上提供服务,但是在不同的IP地址上。

答案 2 :(得分:1)

由于该问题在流行的搜索中出现(docker分配ip容器等),因此(当前)已接受的答案已过时,@ VonC的正确答案尚无定论(包括讨论),让我们用一个例子来总结一下可以完成,结果是什么

docker run -d nginx:latest  #--> container with id be46...
docker network create --subnet 10.30.0.0/24 --ip-range 10.30.0.0/24 multi-host-network
docker network connect --ip 10.30.0.4 multi-host-network be46

现在容器已附加10.30.0.4/24;您可以从运行命令的主机上ping 10.30.0.4。在docker stop be46之后ping不起作用,在您docker start be46之后ping再次成功。在主机上,创建以下路由:

10.30.0.0/24 dev br-b74e7b452f23 proto kernel scope link src 10.30.0.1

(因此主机假定10.30.0.1)。

注意:这完成了“将给定IP分配给容器”的任务,但是目前我还不清楚是否可以在“ docker swarm”上下文中做到这一点,并实现与我们相同的冗余度(将端口分配给服务)。

相关问题