使用 'localhost' 连接到 docker-machine
Posted
技术标签:
【中文标题】使用 \'localhost\' 连接到 docker-machine【英文标题】:Connect to docker-machine using 'localhost'使用 'localhost' 连接到 docker-machine 【发布时间】:2016-05-24 04:20:43 【问题描述】:有某些功能,例如没有 https 的 javascript 服务工作者,只能在 localhost 上运行,但是当我使用在 docker-machine 上运行的 docker-compose 在 docker 容器中运行我的应用程序时,我需要连接使用我从
获得的地址到它docker-machine ip default
有没有办法将localhost
映射到那个ip?
【问题讨论】:
我不熟悉JavaScript Worker
,但我认为它运行在您的浏览器上,而不是本地主机上
是的,它在您的浏览器中运行。但是,如果您在主机名不是localhost
的服务器上运行它,则该页面需要通过 https 提供才能正常工作。
如果您在本地计算机上编辑 hosts
文件并在 docker 主机上映射 port 80
会怎样
这也许是可能的。我得到的 ip 似乎总是一样的,所以可以工作。
【参考方案1】:
最简单的方法是从 VBox 进行端口转发
设置->网络->适配器1->端口转发
然后添加名称,在主机中添加 127.0.0.1(对于本地主机)然后正确的端口绑定并重新启动 VM。
【讨论】:
【参考方案2】:您可以添加一个 VirtualBox 端口转发以将 docker 主机上的端口映射到您的本地机器。
假设您的 docker 机器被称为“默认”并且您想将容器中的端口 80 映射到 localhost:8888 您可以运行:
vboxmanage modifyvm default --natpf1 "nameformapping,tcp,,8888,,80"
或者如果虚拟机正在运行
vboxmanage controlvm default natpf1 "nameformapping,tcp,,8888,,80"
这也可以在虚拟机设置中的 VirtualBox UI 中完成。这是来自 VirtualBox 的文档https://www.virtualbox.org/manual/ch06.html#network_nat
您还需要将容器上的端口映射到 docker 机器上的端口,在启动容器时执行此操作(这也假设您的 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
【讨论】:
好答案。我通常看到以相反方式描述的映射顺序。您将 localhost:8888 映射到 vm:80 并将 docker 机器上的端口 80 映射到容器中的端口 80,数据包流动的方式。natpfN
不是标志,而是位置参数。命令应该是vboxmanage controlvm default natpf1 "nameformapping,tcp,,8888,,80"
很好,它是 modifyvm 但不是 controlvm 的标志......非常令人困惑。我更新了答案以显示两个选项
我应该为映射提供什么名称??是本地主机吗?【参考方案3】:
编辑您的 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 中支持多个域,您可以在其他容器前面创建一个带有 nginx 的代理容器。
【讨论】:
与localhost
这不起作用,至少与 mongo 一起。我的意思是如果将192.168.99.100 localhost
添加到etc/hosts
,如果您只想使用mongo
命令(默认使用localhost:27017)连接到mongo,它将不起作用以上是关于使用 'localhost' 连接到 docker-machine的主要内容,如果未能解决你的问题,请参考以下文章
docker 无法使用不同的用户从 localhost 连接到 mariadb
无法从 docker 容器连接到 Localhost Mysql
错误:无法在 http+docker://localhost 连接到 Docker 守护程序 - 它正在运行吗? [关闭]
将 sprig 连接到 kafka 开始使用 docker compose 进行 localhost 开发