如何将特定 IP 分配给容器,并使其在 VM 主机外部可访问



我希望在虚拟机主机之外的两个容器在其单独的特定IP地址(192.168.0.222192.168.0.227(上可用,而无需端口映射。这意味着我希望使用其 IP 直接访问容器上的任何端口。我已经有计算机在 VM 主机之外的网络运行,范围为 192.168.0.1–192.168.0.221。

现在 Docker 1.10.0 是否可以做到这一点,如果是,如何?

我使用的是带有docker version 1.10.0, build 590d5108docker-machine version 0.6.0, build e27fb87的OS X 10.11,使用boot2docker/VirtualBox驱动程序。


我一直试图弄清楚这一点一段时间,但没有运气,我已经阅读了以下问题和答案:

  • 如何将静态公共 IP 分配给 docker 容器
  • 如何在没有端口映射的情况下将 docker 容器的 ip 和端口暴露给外部 docker 主机?
  • 如何使网络上的其他计算机访问我的 Docker 容器(使用端口映射(?
根据

Jessie Frazelle的说法,现在应该可以这样做.
请参阅"所有事物的 IP">

这太酷了,我几乎受不了了。

在 Docker 1.10 中,出色的 libnetwork 团队添加了为容器指定特定 IP 的功能。如果你想看到拉取请求,它在这里:docker/docker#19001。

# create a new bridge network with your subnet and gateway for your ip block
$ docker network create --subnet 203.0.113.0/24 --gateway 203.0.113.254 iptastic
# run a nginx container with a specific ip in that block
$ docker run --rm -it --net iptastic --ip 203.0.113.2 nginx
# curl the ip from any other place (assuming this is a public ip block duh)
$ curl 203.0.113.2
# BOOM golden

这确实说明了您现在在 docker network connect 中看到的新docker run --ip选项。

如果指定,则在重新启动已停止的容器时重新应用容器的 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
<小时 />

像往常一样,"使可访问"部分将涉及端口转发。

相关内容

最新更新