【发布时间】:2020-09-27 17:54:33
【问题描述】:
有没有办法将static public IP 分配给容器。所以容器有公网IP。客户端可以通过IP访问容器。
【问题讨论】:
标签: docker
有没有办法将static public IP 分配给容器。所以容器有公网IP。客户端可以通过IP访问容器。
【问题讨论】:
标签: docker
现在应该可以使用 docker 1.10 和您现在在 docker network connect 中看到的 new docker run --ip option。
如果指定,则在重新启动停止的容器时重新应用容器的 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。
【讨论】:
对于当前发布的 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 地址上。
【讨论】:
-p将ip绑定到容器。
由于这个问题在热门搜索中弹出(docker assign ip container 等),(当前)接受的答案已经过时,@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”上下文中执行此操作,并实现与我们在那里相同级别的冗余(将端口分配给服务)。
【讨论】: