2016-02-12 77 views
10

某些功能,如没有https的JavaScript服务工作者,只能在localhost上工作,但是当我在Docker容器中运行我的应用程序时,使用docker-compose泊坞窗机的,我需要用我得到的地址从使用'localhost'连接到docker-machine

docker-machine ip default 

连接到它是否有办法来映射localhost到该IP?

+0

我不熟悉JavaScript的'但是Worker'我觉得在你的浏览器这个运行,而不是本地主机 –

+0

是的,它运行在您的浏览器。但是如果你在一台主机名为'localhost'的服务器上运行它,那么该页面需要通过https服务才能工作。 – bigblind

+0

怎么样,如果你在你的本地机器上编辑你的'hosts'文件并且在码头主机上映射'port 80' –

回答

22

您可以添加一个VirtualBox端口,将docker主机上的端口映射到本地计算机。

假设你的搬运工机器被称为“默认”,并要映射端口80在你的容器为localhost:8888,你可以运行:

vboxmanage modifyvm default --natpf1 "nameformapping,tcp,,8888,,80" 

,或者如果VM运行

vboxmanage controlvm default natpf1 "nameformapping,tcp,,8888,,80" 

这也可以在VM的设置中的VirtualBox UI中完成。这里是来自VirtualBox的文档https://www.virtualbox.org/manual/ch06.html#network_nat

您还需要将容器上的端口映射到泊坞窗机器上的端口,在启动容器时这样做(这也假定您有一个“EXPOSE 80 “命令你Dockerfile

docker run -p 80:80 mycontainer 

https://docs.docker.com/engine/reference/run/

另见:https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

+0

很好的答案。我通常会看到相反的顺序。您将docker计算机上的localhost:8888映射到vm:80和80端口,并将其映射到容器中的端口80,即数据包的流向。 – Matt

+0

'natpfN'不是一个标志,它是一个位置参数。该命令应该是'vboxmanage controlvm default natpf1“nameformapping,tcp ,, 8888,,80”' –

+0

好的捕获,它是一个用于modifyvm但不是controlvm的标志......非常混乱。我更新了答案,以显示两个选项 –

13

编辑您的hosts文件会导致你的本地机器不仅外观直接指向为域指定的IP地址。因此,您可以将docker-machine的IP地址添加到本地计算机的etc\hosts文件中,并将容器上的端口80映射到docker-machine上的端口80

例子:

1)获取搬运工主机的IP地址

$ docker-machine ip default 
192.168.99.100 

2)该行添加到etc/hosts文件在本地计算机

192.168.99.100 domain.com 

3)检查你的机器解决该领域。

$ ping domain.com 
PING domain.com (192.168.99.100): 56 data bytes 
64 bytes from 192.168.99.100: icmp_seq=0 ttl=64 time=0.294 ms 
64 bytes from 192.168.99.100: icmp_seq=1 ttl=64 time=0.437 ms 
64 bytes from 192.168.99.100: icmp_seq=2 ttl=64 time=0.556 ms 
64 bytes from 192.168.99.100: icmp_seq=3 ttl=64 time=0.270 ms 

注:

  • 对于Windows用户如果要支持多个域在短短一个单一的泊坞窗机的hosts文件在C:\Windows\System32\Drivers\etc\hosts
  • localted,你可以创建一个代理容器nginx在你的其他容器的前面。
1

最简单的方法是从垂直框使端口转发

设置 - >网络 - >适配器1->端口转发

然后添加名称,在主机添加127.0.0.1(本地主机),然后正确的端口绑定并重新启动虚拟机。

enter image description here

相关问题