使用 '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。
有些功能,比如 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。