【问题标题】:org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Connection refused (Connection refused)org.apache.http.conn.HttpHostConnectException:连接到 localhost:8500 [localhost/127.0.0.1] 失败:连接被拒绝(连接被拒绝)
【发布时间】:2019-08-01 10:39:36
【问题描述】:

我尝试在 windows 10 上使用 Consul 执行 spring boot jar 文件。首先我在 windows 10 上安装了 Consul。然后我执行 spring boot jar 文件。供您参考,下面是 application.properties。

spring.cloud.consul.host=192.168.200.51
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.healthCheckInterval=300s
spring.cloud.consul.config.enabled=true
spring.application.name = blog-app-service

并且网络浏览器上的http://localhost:8500/ui 可以成功发现该服务。但是我将spring boot项目docker化了。运行 docker 容器 是成功的。但是与领事的连接失败了。例外如下,

Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8500 [localhost/127.0.0.1] failed: Connection refused (Connection refused)
        at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156) ~[httpclient-4.5.8.jar!/:4.5.8]
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:374) ~[httpclient-4.5.8.jar!/:4.5.8]
        at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393) ~[httpclient-4.5.8.jar!/:4.5.8]
        at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) ~[httpclient-4.5.8.jar!/:4.5.8]
        at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) ~[httpclient-4.5.8.jar!/:4.5.8]
        at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) ~[httpclient-4.5.8.jar!/:4.5.8]
        at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.8.jar!/:4.5.8]
        at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.8.jar!/:4.5.8]
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) ~[httpclient-4.5.8.jar!/:4.5.8]
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:221) ~[httpclient-4.5.8.jar!/:4.5.8]
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:165) ~[httpclient-4.5.8.jar!/:4.5.8]
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:140) ~[httpclient-4.5.8.jar!/:4.5.8]
        at com.ecwid.consul.transport.AbstractHttpTransport.executeRequest(AbstractHttpTransport.java:61) ~[consul-api-1.4.1.jar!/:na]

在对spring boot jar进行docker化之前,我的项目与consul连接无误。但是在dockerizing之后,连接被拒绝了。 dockerzing时我会错过任何程序吗?任何回复将不胜感激。

【问题讨论】:

  • Consul 仍在主机上运行,​​而 Spring Boot 应用程序在容器中,而容器中的 localhost 从主机和容器引用时是不同的。要么你也对 consul 进行 dockerize,然后将这些容器连接到同一个网络(也许使用 docker-compose 作为一种选择),或者你从 spring boot 容器中找到主机 IP 并将其添加为 consul 主机。为了方便起见,我建议 docker-compose 使用 2 个容器。

标签: spring-boot docker consul spring-cloud-consul


【解决方案1】:

使用 host.docker.internal 作为 docker 的主机。

我想从容器连接到主机上的服务

主机有一个不断变化的 IP 地址(如果您没有网络访问权限,则没有)。从 18.03 开始​​,我们的建议是连接到特殊的 DNS 名称 host.docker.internal,它解析为主机使用的内部 IP 地址。这是出于开发目的,不适用于 Docker Desktop for Windows 之外的生产环境。

更多信息: https://docs.docker.com/docker-for-windows/networking/#known-limitations-use-cases-and-workarounds

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    相关资源
    最近更新 更多