是否可以将静态公共 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 容器?的主要内容,如果未能解决你的问题,请参考以下文章

为 Docker 容器分配静态 IP

静态公共IP地址的免费域名

Docker 容器的多个静态 IP

FW Docker为容器分配指定物理网段的静态IP

将 LAN IP 地址分配给与主机 IP 地址不同的 Docker 容器

有没有办法将多个静态 IP 分配给 Amazon Lightsail 实例?