如何将 docker 机器端口转发到 OSX 上的主机端口?

How do I forward a docker-machine port to my host port on OSX?

我在我公司交付一个私有docker容器,希望我的同事能够访问我们的内部网络,问题是我的访客OS是OSX 因此我只能使用 docker 机器上的 192.168.99.100:3000 默认 IP 访问我的应用程序。

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

此时Docker机器是虚拟机运行ning在你机器的VirtualBox下,所以要暴露你的应用程序端口你需要将你的虚拟机端口映射到你的主机端口。

要实现此目的,有两种选择,但在确保您的 Docker 机器已停止之前 运行ning:

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

选项 1 - 使用 VirtualBox 界面

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

选项 2 - 使用 VirtualBox 命令行

只需运行以下带有您自己的参数的命令:

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

最后的考虑

现在您可以启动 Docker 机器 运行ning:

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

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

P.S.: 您的 Docker 机器名称可能不是 默认值 ,在这种情况下相应地更改名称。

如果您尝试使用以下端口运行 公告板示例

docker run --publish 8000:8080 --detach --name bb bulletinboard:1.0

On macOs you can open VirtualBox and then right-click on the machine --> Settings --> Network --> Advanced --> Port Forwarding

如果添加以下规则

那么您应该可以使用

访问该应用程序
> http://localhost:8100/

这可以通过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>)