是否可以将静态公共 IP 分配给 Docker 容器?
Posted
技术标签:
【中文标题】是否可以将静态公共 IP 分配给 Docker 容器?【英文标题】:Is it possible to assign a static public ip to a Docker Container? 【发布时间】:2015-02-15 10:50:56 【问题描述】:我一直在尝试将我的五个公共 ip 之一分配给我的 docker 容器。由于 docker 的性质及其用途,这似乎应该是可能的。我发现这个网站解释了我想做什么,但自从 Docker 离开 LXC 后它不再有效:
http://programster.blogspot.com/2014/06/docker-run-multiple-docker-websites-on.html
我尝试使用我的容器正在使用的 ip 建立静态 NAT 连接,但没有成功。 docker IP 没有显示在我的路由器页面中,只有主机 ip。
我的问题是:
是否可以将静态公共 ip 分配给 docker 容器,如果可以,如何分配?
和
是否可以让 docker IP 出现在我的路由器配置页面中,如果可以,如何?
谢谢。
【问题讨论】:
【参考方案1】:Docker 1.10 将允许您为容器指定静态 IP 地址 对于它所连接的每个网络。
(请注意,为了向后兼容,此功能仅支持自定义网络,并且仅在指定子网的情况下)
例如;
docker network create -d bridge --subnet 172.25.0.0/16 mynet
docker run -d --net=mynet --ip=172.25.3.3 nginx
欲了解更多信息,请参阅documentation pull request
【讨论】:
【参考方案2】:我知道让 docker 容器使用静态 IP 的唯一方法是使用 pipework。
假设您的意思是获得 DHCP 租约并显示在您的路由器页面上—— docker 什么都没有想到。我不认为那是“码头工人的方式”。如果您使用的是基于 systemd 的发行版 FWIW,则使用 nspawn 非常简单。
【讨论】:
【参考方案3】:可能的解决方案,但我现在无法测试。如果这不正确,请告诉我。
用macvlan制作虚拟网络接口:
见https://superuser.com/questions/175475/ip-address-alias-assigned-by-dhcp
命令:
ip link add dev macvlan0 link eth0 type macvlan #macvlan0 是 v-card 的名字 (lol)
使用管道将容器连接到虚拟网络接口:
见https://github.com/jpetazzo/pipework/#connect-a-container-to-a-local-physical-interface
命令:
管道 macvlan0 $($containerid) dhcp
【讨论】:
似乎只是为了让它“显示”在路由器页面上而进行额外的工作。如果它 ping 并响应一个 IP 地址——谁在乎它是否显示在 DHCP 租用页面上? 我需要将我的一些容器静态 Nat 到一个公共 IP。分配给我的一个容器的 IP 似乎不适用于静态 Nat,所以我认为这可能是一个很好的解决方案。如果存在更简单的方法,请告诉我! :)以上是关于是否可以将静态公共 IP 分配给 Docker 容器?的主要内容,如果未能解决你的问题,请参考以下文章