例如,我有一台主机HM
(Mac OS)。HM
我在里面安装了包含一个虚拟机(boot2docker)的 Virtual Box VM1
(192.168.99.1
在我的主机接口上)。
VM1
我有 docker 的 bridge0 接口,地址是 172.17.0.1/16,我在上面运行了两个 nginx容器172.17.0.2:80
,172.17.0.3:80
因此,如果我在里面使用VM1
这些地址的 curl,我将得到预期的答案。假设对于172.17.0.2
它将是Hello, 1 nginx!
,对于172.17.0.3
-Hello, 2 nginx!
那么问题是 - 是否可以从我的 Mac OS 主机上的不同地址访问这些 nginx 容器? 也许我可以运行某种 VPN?
目前,我只能公开容器内部的端口VM1
并通过地址从主机访问它们192.168.99.1
。
答案1
目前我发现了一个简单的解决方案。
我已经为虚拟接口创建了一个别名VM1
。并在 iptables 中设置从外部 ips 到容器 ips 的路由
答案2
您还可以使用 -p(--publish)docker 标志来公开不同的端口。
示例:-p 81:80
在 172.17.0.2 容器中和-p 82:80
在 172.17.0.3 容器中。
您还可以设置另一个 nginx 来监听配置的虚拟域的 80 端口,并将请求代理/转发到其他机器。