我尝试使用docker-compose将一些容器部署到新的CentOS7 VM(最新的docker版本):
容器之间的连接工作正常。但我的ASP.NET应用程序必须使用公共域名向自己发出请求。它失败了,当我在容器内发出curl请求时,它失败了No route to Host
。注意:我没有使用localhost等。
我发现了另一篇帖子:Docker container cannot connect to host machine: No route to host
在这种情况下似乎是防火墙问题。所以我也尝试添加防火墙规则,但它没有帮助。
答案 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访问它。