我今天才发现这个!我在 Mac OS 10.10.5 上使用带有 virtualbox 的 docker-machine。我尝试的第一件事是将网络接口从 NAT 更改为桥接。这只是破坏了 docker-machine 与 VM 通信的能力。
相反,我添加另一个以桥接模式运行的网络适配器。
启动 docker-machine 后,我得到了这个:
$ docker-machine ip redis-test
10.222.11.242
这是我办公室或 VPN 上的任何其他人都可以访问的本地网络地址。
如果我运行类似的东西:
$ docker run -p 6379:6379 -d redis
我在 10.222.11.242 地址的 6379 端口上运行了一个容器化的 redis 服务。
所以我可以从网络上的其他任何地方执行此操作:
$ telnet 10.222.11.242 6379
Trying 10.222.11.242...
Connected to 10.222.11.242.
Escape character is '^]'.
info
$1827
# Server
redis_version:2.8.19
...
作为一个很酷的好处,我们可以像这样重新映射端口:
$ docker run -p 8080:6379 -d redis
e7cc53d9c157a658041c3bee5967dd3678b4d35e6146a02220a87bfebfc919ad
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7cc53d9c157 redis "/entrypoint.sh redis" 7 seconds ago Up 6 seconds 0.0.0.0:8080->6379/tcp goofy_yonath
bf1dc6c7c6b5 redis "/entrypoint.sh redis" 51 minutes ago Up 51 minutes 0.0.0.0:6379->6379/tcp redis
现在我有两个 redis 实例侦听同一 IP 的不同端口(6379 和 8080)。
编辑:这里有一些细节可以帮助那些对在 VirtualBox 中添加 NIC 到 VM 感到困惑的人。我只为此使用过 VirtualBox,无法提供其他虚拟化系统配置的建议。
- 通过在 VM 管理器中选择 VM 并使用右键菜单或按“command-F”来停止 VM。
- 点击“设置”。
- 点击“网络”。
- 选择当前未启用的适配器之一。
- 启用它。
- 在“附加到”选项中选择“桥接适配器”。
- 点击确定。
- 启动您的虚拟机并尝试一下。
注意:我确信有一些巧妙的命令行选项可用于执行此设置,但因为我只需要在从未费心将其自动化时进行设置。