某些功能,如没有https的JavaScript服务工作者,只能在localhost上工作,但是当我在Docker容器中运行我的应用程序时,使用docker-compose泊坞窗机的,我需要用我得到的地址从使用'localhost'连接到docker-machine
docker-machine ip default
连接到它是否有办法来映射localhost
到该IP?
某些功能,如没有https的JavaScript服务工作者,只能在localhost上工作,但是当我在Docker容器中运行我的应用程序时,使用docker-compose泊坞窗机的,我需要用我得到的地址从使用'localhost'连接到docker-machine
docker-machine ip default
连接到它是否有办法来映射localhost
到该IP?
您可以添加一个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
很好的答案。我通常会看到相反的顺序。您将docker计算机上的localhost:8888映射到vm:80和80端口,并将其映射到容器中的端口80,即数据包的流向。 – Matt
'natpfN'不是一个标志,它是一个位置参数。该命令应该是'vboxmanage controlvm default natpf1“nameformapping,tcp ,, 8888,,80”' –
好的捕获,它是一个用于modifyvm但不是controlvm的标志......非常混乱。我更新了答案,以显示两个选项 –
编辑您的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
注:
C:\Windows\System32\Drivers\etc\hosts
我不熟悉JavaScript的'但是Worker'我觉得在你的浏览器这个运行,而不是本地主机 –
是的,它运行在您的浏览器。但是如果你在一台主机名为'localhost'的服务器上运行它,那么该页面需要通过https服务才能工作。 – bigblind
怎么样,如果你在你的本地机器上编辑你的'hosts'文件并且在码头主机上映射'port 80' –