有没有办法给容器分配一个静态的公共IP呢?这样容器就有了公共IP,客户端就可以用这个公共的静态IP访问容器了。
noj0wjuj1#
现在,在docker 1.10和新的docker run --ip选项(您现在在docker network connect中看到)中,这应该是可能的。如果指定,则在重新启动已停止的容器时重新应用容器的IP地址。如果IP地址不再可用,则容器无法启动。保证IP地址可用的一种方法是在创建网络时指定--ip-range,并从该范围之外选择静态IP地址。这可确保当另一个容器不在网络上时,不会将IP地址提供给该容器。
docker run --ip
docker network connect
--ip-range
$ 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。
8cdiaqws2#
在当前发布的Docker版本中,这是不可能的(没有大量的手工操作),尽管很少有必要。Docker通过使用端口Map在container中公开网络服务,端口Map可以绑定到您主机上的特定ip地址。因此,如果您希望在192.168.10.10和192.168.10.20上各有一个web服务器,请首先确保这些地址在您的主机上可用:
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选项用于将端口Map绑定到一个特定的ip地址,现在您有两个container在同一个端口(端口80)上提供服务,但是在不同的ip地址上。
-p
vuktfyat3#
由于这个问题在流行的搜索(docker assign ip container etc)中弹出,(目前)接受的答案已经过时,而正确的@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.4/24
ping 10.30.0.4
docker stop be46
docker start be46
10.30.0.0/24 dev br-b74e7b452f23 proto kernel scope link src 10.30.0.1
(so主机假定10.30.0.1)。注意:这就完成了“将给定IP分配给容器”的任务,但目前我还不清楚您是否可以在“Docker Swarm”上下文中这样做,并实现与我们在那里相同级别的冗余(将端口分配给服务)。
10.30.0.1
3条答案
按热度按时间noj0wjuj1#
现在,在docker 1.10和新的
docker run --ip
选项(您现在在docker network connect
中看到)中,这应该是可能的。如果指定,则在重新启动已停止的容器时重新应用容器的IP地址。如果IP地址不再可用,则容器无法启动。
保证IP地址可用的一种方法是在创建网络时指定
--ip-range
,并从该范围之外选择静态IP地址。这可确保当另一个容器不在网络上时,不会将IP地址提供给该容器。另请参阅Jessie Frazelle的博客文章“IPs for all the Things“,并拉取请求docker/docker#19001。
8cdiaqws2#
在当前发布的Docker版本中,这是不可能的(没有大量的手工操作),尽管很少有必要。
Docker通过使用端口Map在container中公开网络服务,端口Map可以绑定到您主机上的特定ip地址。因此,如果您希望在
192.168.10.10
和192.168.10.20
上各有一个web服务器,请首先确保这些地址在您的主机上可用:然后启动第一个容器:
最后启动第二个容器:
在上面的命令中,
-p
选项用于将端口Map绑定到一个特定的ip地址,现在您有两个container在同一个端口(端口80)上提供服务,但是在不同的ip地址上。vuktfyat3#
由于这个问题在流行的搜索(docker assign ip container etc)中弹出,(目前)接受的答案已经过时,而正确的@VonC答案有些不确定(包括讨论),让我们总结一下如何完成这个问题以及结果是什么:
现在容器已经连接了
10.30.0.4/24
;您可以从运行命令的主机执行ping 10.30.0.4
命令。执行docker stop be46
命令后,ping命令不再起作用,执行docker start be46
命令后,ping命令再次成功。在主机上,将创建以下路由:(so主机假定
10.30.0.1
)。注意:这就完成了“将给定IP分配给容器”的任务,但目前我还不清楚您是否可以在“Docker Swarm”上下文中这样做,并实现与我们在那里相同级别的冗余(将端口分配给服务)。