【问题标题】:Host "localhost"overwrites "localhost"in docker主机“localhost”覆盖 docker 中的“localhost”
【发布时间】:2019-08-27 02:22:13
【问题描述】:

我正在尝试在 docker 容器中运行 vue 仪表板并在我的本地计算机上运行服务。两者都绑定到“localhost:80”。在 docer 中同时运行仪表板和服务时,一切正常,但是当在 docker 中运行仪表板并在主机上运行第二个服务时,主机以某种方式覆盖了对 docker localhost 的访问。所以预期的行为: - http://localhost -> 应该加载仪表板 - http://localhost/graphql -> 应该从第二个服务加载 graphql 的 api

所以它们在 docker 中运行时都可以工作,但当一个在 docker 中而第二个在 hist 上运行时不工作。 知道如何解决这个问题吗?我需要在主机上运行第二个服务的原因是我可以更快地调试和编码,而不是在每次代码更改和更新堆栈后构建映像。

谢谢,佐利。

【问题讨论】:

    标签: node.js docker nginx vue.js


    【解决方案1】:

    localhost inside docker 指的是 docker 容器本身。您无法使用它从 docker 内部访问实际主机。

    但是,您的实际主机在 docker 网络中有一个 IP 地址。您可以使用该 IP 访问您的实际主机。您可以通过ifconfig 获得它。寻找docker 接口。在我的机器中,实际主机的 IP 地址为 172.17.0.1

    【讨论】:

    • 没关系,我已经有了从 docker 到主机的连接。问题是默认情况下,当“仪表板”没有运行时,localhost 给了我 {status: "up"} 这很好。一旦我在 docker 中启动“仪表板”并在主机上启动第二个服务,它应该在loclahost 上给我“仪表板”,但它仍然给出{状态:“up”},这不是我想要的
    • 对此的另一个信息:出于开发目的,仪表板应在 docker 和主机上的服务中运行,但主机会覆盖“lcoalhost”,我无法从 docker 访问主机上的“仪表板”当两者都在 docker 中运行时
    【解决方案2】:

    问题解决了,在主机上我必须更改端口并且它开始工作。所以当两个服务都在 docker 中运行时,80 端口可以分配给 2 个容器,并且会被正确解析。但是当一个从 docker 运行它而另一个在主机上运行时,它将无法工作。这就是我对此的解释,也许有人可以给出更好的解释,但现在问题已经解决了。谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-21
      • 2011-02-21
      • 2017-06-01
      • 2018-07-18
      • 2018-04-14
      • 2018-12-10
      • 2013-10-25
      • 1970-01-01
      相关资源
      最近更新 更多