使用'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的代理容器。