5

我正在使用最新的 Docker 工具包在 OSX 上使用 Docker 进行本地开发。我有一个在 docker 容器中运行的节点服务器,绑定到 VM 的端口 9999。我可以从我的 Mac 上的浏览​​器访问此服务器,我想从同一网络上的另一台设备访问。有没有办法将VM绑定到机器的IP地址?还是以其他方式曝光?

4

4 回答 4

6

我今天才发现这个!我在 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,无法就其他虚拟化系统配置提供建议。

  1. 通过在 VM 管理器中选择它并使用右键菜单或按“command-F”来停止 VM。
  2. 点击“设置”。
  3. 点击“网络”。
  4. 选择当前未启用的适配器之一。
  5. 启用它。
  6. 在“附加到”选项中选择“桥接适配器”。
  7. 单击确定。
  8. 启动您的虚拟机并尝试一下。

注意:我确信有一些巧妙的命令行选项可用于执行此设置,但因为我只需要在我从未费心将其自动化时进行设置。

于 2015-11-06T21:46:17.303 回答
3

您可以在 VirtualBox NAT 适配器上设置端口转发。

将其桥接到本地网络(在上面的答案中)与使用 OSX IP 地址不同。如果您使用笔记本电脑并移动到不同的互联网连接,桥接有时会导致额外的头痛。VM 可能不会自动从新网络中提取新 IP,等等。

在 UI 中,转到 Settings --> Network --> Port Forwarding 或从命令行中如下所示:

VBoxManage controlvm "default" natpf1 "tcp-port9999,tcp,,9999,,9999";

其中“default”是虚拟机的名称(“default”通常用于 docker-machine),9999 是您要映射的端口。

更多信息:https ://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

https://www.virtualbox.org/manual/ch06.html(使用 NAT 配置端口转发)

于 2016-01-23T18:24:09.177 回答
2

你把expose命令放在Dockerfile里了吗?

EXPOSE 9999
于 2015-10-08T17:36:58.880 回答
1

基于@e.thompsy 的回答,这里是命令行版本。首先,找出您需要使用的接口名称:

vboxmanage list bridgedifs

对我来说是en1。然后:

docker-machine create ...

docker-machine stop $VM

vboxmanage modifyvm "$VM" --nic3 bridged --bridgeadapter3 en1

docker-machine start $VM

于 2018-02-22T11:06:37.667 回答