【问题标题】:Docker container cannot connect to Host MachineDocker 容器无法连接到主机
【发布时间】:2018-01-03 08:48:54
【问题描述】:

我尝试使用 docker-compose 将一些容器部署到新的 CentOS7 VM(最新的 docker 版本):

  • ASP.NET 应用程序
  • 蒙古人
  • Nginx 反向代理
  • 让我们为 Nginx 加密 Sidecar

容器之间的连接工作正常。但是我的 ASP.NET 应用程序必须使用公共域名向自己发出请求。它失败了,当我在容器内发出 curl 请求时,它失败并显示 No route to Host。注意:我没有使用 localhost 左右。

我发现另一个帖子:Docker container cannot connect to host machine: No route to host

在这种情况下似乎是防火墙问题。所以我也尝试添加防火墙规则,但没有帮助。

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    假设您的 ASP 网络容器正在运行的容器 X 确实需要使用域联系您的应用程序。假设您在开发中使用 domain.dev 或 domain.tld,您可以在启动时(或以 docker compose 方式)将“主机”参数传递给容器,以将该域绑定到本地主机,所以 --host domain.tld :127.0.0.1 或者容器的实际IP(私有的)。

    后者需要你实际使用 docker-networks 并在 docker 网络中给每个容器一个静态 IP,这样你在启动它之前就知道 ASP 网络容器 IP。你当然可以在容器中做一些 docker-socket mount + docker inspect 魔法,但这对于开发目的来说太过分了。

    参考资料: - docker 主机条目:https://docs.docker.com/engine/reference/run/#managing-etchosts - 码头工人网络https://docs.docker.com/engine/reference/run/#network-settings

    在 docker compose 中: - docker 主机条目:https://docs.docker.com/compose/compose-file/#extra_hosts - 网络:https://docs.docker.com/compose/compose-file/#networks

    提示:我强烈建议您使用 docker-compose。

    替代方式: 您还可以使用服务名称作为容器中的域,因为这会自动解析为容器 IP,因此假设您的 ASP 网络容器在 docker-compose 文件(服务)中命名为“app”,您可以访问它使用容器中的应用程序。

    【讨论】:

    • 正如我所说,我必须向容器本身发出请求,所以我可以使用 localhost。但这并不能说明问题。
    • 然后检查您的防火墙。这来自一个不同的网桥,它不是本地主机,并且会触发您的防火墙。你没有写任何我写过的东西,既没有映射主机名也没有其他任何东西。不过,好看
    猜你喜欢
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 2020-08-14
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多