使用 'localhost' 连接到 docker-机器

Connect to docker-machine using 'localhost'

有些功能,比如 JavaScript 没有 https 的服务工作者,只能在本地主机上工作,但是当我 运行 我的应用程序在 docker 容器中时,使用 docker-compose,运行s 在 docker-machine 之上,我需要使用从

获得的地址连接到它
docker-machine ip default

有没有办法将 localhost 映射到那个 ip?

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

假设您的 docker 机器名为 "default" 并且您想将容器中的端口 80 映射到 localhost:8888 您可以 运行:

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

或者如果虚拟机是 运行ning

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

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

的文档

你还需要将容器上的端口映射到 docker 机器上的端口,你在启动容器时这样做(这也假设你有一个 "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

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

示例:

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 机器上支持多个域,你可以在其他容器前面创建一个带有 nginx 的代理容器。

最简单的方法是从 VBox 进行端口转发

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

然后添加名称,在主机中添加 127.0.0.1(对于本地主机)然后适当的端口绑定并重新启动 VM。