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

Windows容器的Docker以NAT模式连接到主机(现代Docker不是boot2docker),docker,virtualbox,docker-machine,docker-for-windows,Docker,Virtualbox,Docker Machine,Docker For Windows,请注意,这并不是之前问题的重复,这些问题起初看起来很相似,至少我可以找到 我正在运行Windows docker,最新版本,试图获得一个容器,以便能够连接到本地主机进行测试。我有充分的理由使用NAT模式的Virtualbox,以避免将数据库暴露在更大的网络中 我的设置过程需要完全自动,这是将VBox保持在NAT模式的另一个要点,其复杂性介于两者之间 我的构建过程包括以下几行: docker run --volumes-from mystore -p 5671:5671 -p 5672:5672

请注意,这并不是之前问题的重复,这些问题起初看起来很相似,至少我可以找到

我正在运行Windows docker,最新版本,试图获得一个容器,以便能够连接到本地主机进行测试。我有充分的理由使用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)
为了让外部世界联系起来,它还做了如下事情:

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中运行这样的软件连接到本地主机上运行的Django服务器。有没有一种方法可以做到这一点,而不用将VBox的网络设置为桥接模式并将所有配置抛出窗口?如果我必须做桥接,它能以自动化的方式可靠地完成吗?或者,作为一项纯粹用于测试的工作,我是否可以让它连接到运行所述服务器的本地网络(即Macbook)上的另一台计算机


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

对于将来发现此功能的任何人


因为这纯粹是为了测试,所以我临时添加了一个网桥网络适配器作为第三个接口。使用纯NAT网络似乎是不可能的。

现在还不清楚使用此端口转发和NAT路由究竟要实现什么。如果您将解决方案与Docker耦合,而您似乎可以使用Docker本身,那么使用
vboxmanage
似乎在某种程度上违背了Docker的目的。也不清楚你所说的“现代docker”是什么意思(或者如果不是的话,为什么你有boot2docker标签),但我假设你指的是在VirtualBox虚拟机上安装Linux。注意-您可以
-P
将所有暴露的端口发布到Docker主机。对不起。我希望容器中的软件以NAT模式连接到本地主机上的服务器。我认为这是显而易见的。将进行编辑。就boot2docker而言,它仍然在VirtualBox上运行,所以我给它加了标签