如何在OSX上将docker-machine端口转发到主机端口?

22

我正在为公司交付一个私有的Docker容器,并希望我的同事能够在内部网络中访问。问题是,我的宿主机操作系统是OSX,因此我只能使用docker machine的默认ip地址192.168.99.100:3000来访问我的应用程序。

我该如何将docker-machine的3000端口转发到我的主机80端口?

4个回答

32

现在,Docker Machine是在您的计算机上运行的VirtualBox虚拟机。因此,要公开您的应用程序端口,您需要将虚拟机端口映射到主机端口。

为了实现这一点,有两个选项,但在执行之前,请确保停止运行Docker Machine:

docker-machine stop default     # see PS below if docker machine isn't default

选项1 - 使用VirtualBox界面

  • 打开VirtualBox管理器
  • 选择您的Docker Machine VirtualBox映像(例如:默认)
  • 打开设置 -> 网络 -> 高级 -> 端口转发
  • 添加您的应用程序名称,所需的主机端口(例如:80)和您的Guest端口(例如:3000)

选项2 - 使用VirtualBox命令行

只需使用您自己的参数运行以下命令:

VBoxManage modifyvm "dev" --natpf1 "myapp,tcp,,80,,3000"

最终考虑

现在您可以启动Docker Machine:

docker-machine start default
eval $(docker-machine env default)

然后启动您的应用程序Docker容器并测试它是否运行http://localhost/

附注:您的Docker Machine名称可能不是default,在这种情况下,请相应更改名称。


1
在我探索的所有答案中,这是帮助我的一个。+1 - Tagc
3
不必先运行 docker-machine stop。自回答发布以来可能已经发生了更改,但至少在最近几个月内是正确的。 - toddkaufmann
1
请注意,如果要映射到主机端口<1024,则需要以root身份运行Virtual Box。 - Alex Dvoretsky
1
这里的 devmyapp 是什么?它们与 default VM 有什么关系? - user2490003
2
已经想通了- "dev" 应该改为 "default",以匹配虚拟机的名称,而 myapp 是您要分配给此新端口转发规则的任何名称。通常一个好的命名方式是以您的应用程序命名。 - user2490003
显示剩余3条评论

2
这可以通过ssh端口转发来实现:
ssh -L 0.0.0.0:80:localhost:3000 docker@$(docker-machine ip)

它会要求您输入 docker 用户的密码,应该是 tcuser

如果您的 docker-machine 实例不是命名为 "default",那么您需要在其中指定它的名称,如下:

ssh -L 0.0.0.0:80:localhost:3000 docker@$(docker-machine ip <name>)

1
如果您正在尝试使用以下端口运行公告板示例,则需要进行以下操作。
docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0

在macOS上,您可以打开VirtualBox,然后右键单击该虚拟机->设置->网络->高级->端口转发。如果您添加以下规则:

enter image description here

然后您就可以使用以下方式访问该应用程序
> http://localhost:8100/

0

docker-machine 使用虚拟机作为底层,通常使用 VirtualBox。

您可以通过以下方式找到该机器的 IP 地址:

docker-machine ip

您可以直接访问该IP地址:

docker run -p 8080:8080 apache --name hello
curl $(docker-machine ip):8080/index.html

很遗憾,该IP地址不是永久的(在 VBox 重新启动后可能会更改):将端口转发到localhost可能会使其变为永久。您必须停止虚拟机并配置虚拟机:

VBoxManage modifyvm "default" --natpf1 "myapp,tcp,,80,,3000"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接