如何将特定的IP分配给容器并使其可以在VM主机之外访问?

我希望我的两个容器在VM主机之外的独立的特定IP地址( 192.168.0.227 )上可用,无需端口映射。 这意味着我希望通过使用其IP来直接访问容器上的任何端口。 我已经在虚拟机主机之外的networking中运行了192.168.0.1-192.168.0.221范围内的机器。

Docker 1.10.0现在可以实现吗?如果是这样,怎么样?

我在OS X 10.11中使用docker version 1.10.0, build 590d5108docker version 1.10.0, build 590d5108 docker-machine version 0.6.0, build e27fb87 ,使用boot2docker / VirtualBox驱动程序docker-machine version 0.6.0, build e27fb87


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

  • 如何分配静态公共IP到docker集装箱
  • 如何在不使用端口映射的情况下将Docker容器的ip和端口暴露给外部docker主机?
  • 我怎样才能让我的networking上的其他机器访问我的Docker容器(使用端口映射)?

据Jessie Frazelle说 ,现在应该是可以的。
请参阅“ 所有事情的知识产权 ”

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

在Docker 1.10中,令人敬畏的libnetwork团队添加了为容器指定特定IP的function。 如果你想看到拉的请求在这里: 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地址可用的一种方法是在创buildnetworking时指定--ip-range ,并从该范围外select静态IP地址。 这可确保当此容器不在networking上时,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 

“可访问”部分将像往常一样涉及端口转发 。