请注意,这不是先前看起来相似的问题的欺骗,至少我能找到。
我正在运行最新版本的 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)上运行所述服务器的另一台计算机吗?
非常感谢您的帮助和指导。