我正在为公司交付一个私有的Docker容器,并希望我的同事能够在内部网络中访问。问题是,我的宿主机操作系统是OSX,因此我只能使用docker machine的默认ip地址192.168.99.100:3000来访问我的应用程序。
我该如何将docker-machine的3000端口转发到我的主机80端口?
我正在为公司交付一个私有的Docker容器,并希望我的同事能够在内部网络中访问。问题是,我的宿主机操作系统是OSX,因此我只能使用docker machine的默认ip地址192.168.99.100:3000来访问我的应用程序。
我该如何将docker-machine的3000端口转发到我的主机80端口?
现在,Docker Machine是在您的计算机上运行的VirtualBox虚拟机。因此,要公开您的应用程序端口,您需要将虚拟机端口映射到主机端口。
为了实现这一点,有两个选项,但在执行之前,请确保停止运行Docker Machine:
docker-machine stop default # see PS below if docker machine isn't default
选项1 - 使用VirtualBox界面
选项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,在这种情况下,请相应更改名称。
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>)
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"
docker-machine stop
。自回答发布以来可能已经发生了更改,但至少在最近几个月内是正确的。 - toddkaufmanndev
和myapp
是什么?它们与default
VM 有什么关系? - user2490003myapp
是您要分配给此新端口转发规则的任何名称。通常一个好的命名方式是以您的应用程序命名。 - user2490003