【问题标题】:Access docker-machine VM ports without port forwarding无需端口转发即可访问 docker-machine VM 端口
【发布时间】:2016-03-26 00:04:44
【问题描述】:

我正在尝试学习 Docker,到目前为止,我遇到了很多在 docker-machine 中需要但在 boot2docker 中不需要的“变通办法”。

我当前的问题是从我的主机访问我的 docker 容器。

我有我的 Windows 主机,运行着一个使用 docker-machine 创建的虚拟机,并且在该 docker 虚拟机中我正在运行一个简单的 nginx 服务器容器。

运行 nginx 容器以将其 80 端口暴露给 docker-machine 的 8000。

docker run -d -p 8000:80 nginx

而我想要实现的是能够使用浏览器从我的 Windows 中打开此服务器。

如果我在 Windows 中使用 docker-machine ip 给我的 IP 使用 curl(Git bash,而不是 ssh-ed 到 docker-machine VM),那么它可以工作。但是使用我的浏览器不能(我目前使用的是 Microsoft Edge),如果我设置了 NAT 端口转发,我可以让浏览器工作。

curl $(docker-machine ip dev):8000

正如我所读到的,应该可以在不为每个端口指定端口转发规则的情况下访问 VM 端口,VirtualBox 应该自动公开和转发这些端口。

我做错了什么还是我必须为我的虚拟机和我想要使用的主机操作系统之间的每个端口指定端口转发规则?

【问题讨论】:

  • 你的意思是http://:8000/不起作用?
  • 是的,但仅限于尝试使用我的浏览器时。因为它是一个网络服务器,所以我不想一直使用 curl!

标签: docker portforwarding docker-machine


【解决方案1】:

经过一天的挖掘,我有了一个疯狂而疯狂的想法,尝试使用另一个浏览器,它运行良好。

因此,对于遇到此问题并且您正在使用 Microsoft Edge(像我一样尝试)的任何人,请切换浏览器。 Chrome 甚至旧版 IE 都可以正常工作。

【讨论】:

    【解决方案2】:

    在 Bash 中,$(docker-machine ip dev) 表示“运行命令 docker-machine ip dev,获取该命令的输出并将其插入到此处的命令行中”。

    如果你运行

    docker-machine ip dev
    

    在你的 shell 中,它会打印一个你可以在你的网络浏览器中使用的 IP 地址。

    如果您将此地址输入/etc/hosts(或您平台的模拟地址),您可以为 IP 地址使用友好别名。

    【讨论】:

    • 是的,我能够获取我的 docker-machine(docker 主机)的 IP,但是将该 IP 放入浏览器不起作用(除非我在 NAT 上设置了端口转发码头机器的)。我找到了类似 Docker 桥接模式的东西,我会尝试看看它是否符合我的要求(即避免手动指定所有端口转发端口)。
    【解决方案3】:

    就我而言,这是因为我的浏览器配置了 proxy pac (Proxy_auto-config file),其中不包括 192.169.x.y 内部 boot2docker 机器 ips。

    这意味着:

    • 浏览器尝试联系企业代理(但失败),
    • 而常规的CMD shell 会话,将NO_PROXY 环境变量设置为192.168.x.y,将允许curl http://192.168.x.y/... 正常工作。

    【讨论】:

      猜你喜欢
      • 2020-07-14
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 2021-02-16
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多