Docker for Windows容器以NAT模式连接到主机(现代docker而不是boot2docker)

时间:2016-07-15 02:57:49

标签: docker virtualbox docker-machine docker-for-windows

请注意,这不是先前几乎看似相似的问题,至少我能找到。

我正在运行Windows docker,最新版本,试图让容器能够连接到localhost进行测试。我有充分的理由使用NAT模式Virtualbox,以避免将数据库暴露给更大的网络。

我的设置过程需要完全自动化,这是将VBox置于NAT模式的另一个要点,并且复杂程度中等。

我的构建过程包括以下行:

docker run --volumes-from mystore -p 5671:5671 -p 5672:5672 -p 15672:15672 -p 15671:15671 -p 15670:15670 --name myrmyq -d myrmqimage
docker run -p 80:80 -p 443:443 --link mypg:mypg --link myrmq:myrmq --name myserver -d myserverimage

为了让外面的世界能够连接,它也会做这样的事情:

vboxmanage controlvm "myvm" natpf1 "tcp-port15672,tcp,,15672,,15672" (not exact, this is from python script with lots of quotes)

由于NAT路由,这允许只在计算机外部的任何容器上访问计算机上的特定端口,即使暴露了更多容器(例如另一个容器中的Postgres端口)。到目前为止,非常好:只有我想要的端口才能暴露在外面,并且运行良好!

此外,在机器上运行的服务与docker容器建立连接,因此将所有-p端口暴露在本地,而不会让上述数据库暴露给它,这样很方便网络。

只是,现在我需要能够允许在Docker中像这样运行的软件连接到在localhost上运行的Django服务器。有没有办法在没有将VBox的网络设置为桥接模式并将所有配置抛出窗口的情况下执行此操作?如果我必须做桥接,可以自动化地完成吗?或者,作为纯粹用于测试的解决方法,我是否可以将其连接到运行该服务器的本地网络(即我的Macbook)上的另一台计算机?

非常感谢您的帮助和帮助指导。

1 个答案:

答案 0 :(得分:0)

对于将来发现这一点的任何人,

由于它纯粹是为了测试,我暂时添加了一个桥接网络适配器作为第三个​​接口。使用纯NAT网络似乎是不可能的。