如何将特定的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 590d5108
和docker 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
“可访问”部分将像往常一样涉及端口转发 。