我想在分配给我主机的该接口的本地网络上创建一个虚拟网络接口(TUN接口?)和一个IP地址,然后运行一个侦听该接口上端口X的进程(例如HAProxy)。有没有解决这个问题的方法?
我希望能解决Mac缺乏对桥接网络的支持的Docker。
目前,在我的应用程序上工作的开发人员可以通过Vagrant在VirtualBox VM中启动开发环境。 Virtualbox会建立一个虚拟接口vboxnet1
,并在本地IP地址范围inet addr:172.16.0.1 Bcast:172.16.0.255
中为其分配一个IP地址,然后
流浪的hostmanager插件,然后编辑/etc/hosts
以添加指向的条目
myapplication.dev
映射到IP地址172.16.0.1
。现在,开发人员只需将他们的浏览器指向myapplication.dev
,流量就会被定向到VM内的HTTP服务器,侦听端口80和443。这可以跨平台无缝地工作。
我希望重现这种体验,除了让应用程序在Docker容器中而不是在虚拟机中运行。在Linux上,这很简单。我可以在桥接模式下运行容器,我将获得一个docker0
接口和将被路由到我的容器的本地ip。但这在Mac上根本不可能。每个Docker for Mac's documentation
macOS上没有docker0桥
由于在Docker for Mac中实现联网的方式,您无法在主机上看到docker0接口。该界面实际上是在虚拟机中...
适用于Mac的Docker无法将流量路由到容器。
建议:
我们当前的建议是发布端口,或从另一个容器连接。即使容器在覆盖网络而不是桥接网络上,这也是在Linux上也需要执行的操作,因为这些容器未路由。
这真是个无赖,但至少是一个起点。
最简单的方法是直接转发端口443和80,并将myapplication.dev
映射到127.0.0.1
;但是,不幸的是,这将阻止开发人员在其主机上运行其他应用程序以侦听443和80,许多人都这样做。
另一种方法是将主机上的端口20443和20080(不太可能使用)转发到容器内的443和80。然后,要求开发人员运行带有简单HAProxy的Vagrant VM,该HAProxy监听virtualbox1
网络上的443和80,以某种方式将流量转发到主机上的20443和20080,并依靠Vagrant hostmanager插件来映射{{ 1}}。这会行得通,但是将整个虚拟机启动以运行HAProxy只是为了将TCP改组到不同的端口似乎并不令人满意。我宁愿直接管理TUN界面。
这实际上是我职业生涯中第二次遇到这个确切的问题。所以我想我会在公共场所写这篇文章,希望能得到一些建议或见解,并让其他任何参与其中的人迅速起步。