Docker容器无法连接到Host Machine

时间:2017-07-27 14:35:13

标签: docker docker-compose

我尝试使用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

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

1 个答案:

答案 0 :(得分:0)

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

后者需要您实际使用docker-networks并在docker网络中为每个容器提供静态IP,因此您在启动它之前就知道ASP net容器IP。你当然可以在容器中做一些docker-socket mount + docker inspect magic,但是为了开发目的这太过于夸张了。

参考文献:   - docker主机条目:https://docs.docker.com/engine/reference/run/#managing-etchosts   - docker networks https://docs.docker.com/engine/reference/run/#network-settings

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

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

替代方式: 您也可以使用service-name作为容器中的域,因为这会自动解析为容器IP,因此假设您的ASP net容器名为" app"在docker-compose文件(服务)中,您可以使用容器中的app访问它。