使用'localhost'连接到docker-machine

有一些function,比如没有https的JavaScript服务工作者,只能在localhost上工作,但是当我在Docker容器中运行我的应用时,使用在docker-machine上运行的docker-compose,我需要连接到它我得到的地址

docker-machine ip default 

有没有办法将localhost映射到该IP?

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

假设您的docker计算机被称为“default”,并且您希望将容器中的端口80映射到localhost:8888,则可以运行:

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

或者如果虚拟机正在运行

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

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

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

 docker run -p 80:80 mycontainer 

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

另请参阅: https : //github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

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

例:

1)获得docker主机的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
  • 如果你只想在一台docker-machine中支持多个域,你可以在其他容器的前面创build一个带有nginx的代理容器。