在 Docker 中将 Spring-cloud-config 服务器托管为微服务

Posted

技术标签:

【中文标题】在 Docker 中将 Spring-cloud-config 服务器托管为微服务【英文标题】:Hosting Spring-cloud-config server as a micro service in Docker 【发布时间】:2019-12-13 22:23:26 【问题描述】:

如何在 Docker 容器中托管注册为 Eureka Client 的 Spring 云配置服务器?

我的 Spring Boot 微服务架构包括以下组件:

    eureka-server(Eureka 即服务注册表) config-server(注册为Eureka客户端) 业务逻辑应用(注册为Eureka客户端)

这些 Spring Boot 应用程序在我的 Windows 本地机器上运行良好。同样需要托管在 Docker 容器中。

第 1 步: 我在 Docker 中创建了 Eureka 服务器的映像并作为容器执行。我可以通过 url 访问尤里卡服务器 - http://localhost:8761

第 2 步: 我创建了一个配置服务器的映像,它充当 Eureka 客户端并作为容器执行。在启动此服务时,我遇到了错误。

以下是错误,

 ERROR 1 --- [           main] c.n.d.s.t.d.RedirectingEurekaHttpClient  : Request execution error. endpoint=DefaultEndpoint serviceUrl='http://localhost:8761/eureka/

com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused (Connection refused)
        at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar!/:1.19.1]
        at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar!/:1.19.1]
        at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.9.12.jar!/:1.9.12]
        at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar!/:1.19.1]
        at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar!/:1.19.1]
        at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar!/:1.19.1]
        at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509) ~[jersey-client-1.19.1.jar!/:1.19.1]

在 Docker 容器中运行时,配置服务器未注册到 Eureka 服务器。

我已尝试按照许多博客的建议在我的配置服务器属性中包含以下键值:

轨迹 1:eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

轨迹 2:eureka.client.service-url.defaultZone=http://eureka-server:8761/eureka/

这两个建议都不起作用。

如何调试?

【问题讨论】:

您会修改此问题以显示读者复制问题所需的配置文件吗?如果您可以扩展“不起作用”的含义,那也很好-错误?意外的输出?不寻常的日志?等 嗨@halfer,我已经用错误日志更新了描述。您能否提出解决此问题的任何解决方案。 这样好多了。我已经删除了对“工作示例”的请求,因为这可能违反了“请求外部资源”(来自官方保留原因:要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源与 Stack Overflow 无关,因为它们往往会吸引固执己见的答案和垃圾邮件)。读者也可能将其解读为“替我修好”,这通常不受欢迎。 当你说“我可以通过 url -localhost:8761”访问 eureka 服务器时,你有没有从容器内部尝试过这个? 谢谢!!当我在浏览器中点击 URL 时,我可以看到 Eureka 服务器已启动并正在运行。 【参考方案1】:

(代表问题作者发布解决方案,以便将其移至答案)

我已经解决了报告的问题。我有容器之间的连接问题。

我通过创建自定义网络并在该网络中运行我的容器来解决问题。然后我能够使用容器名称在容器之间建立连接。

例如,我的配置服务器现在可以使用 URL - http://eureka-server:8761 连接到 Eureka。

【讨论】:

以上是关于在 Docker 中将 Spring-cloud-config 服务器托管为微服务的主要内容,如果未能解决你的问题,请参考以下文章

带有临时端口的 Spring-cloud brixton、eureka 和 docker

spring-cloud feign hystrix配置熔断为啥不生效的原因

docker+jenkins+git持续部署实践

如何在 Docker 中将 Debezium 连接到 MongoDB?

如何在谷歌云构建中将参数传递给 docker run

在 Docker 容器中将 Spyder 连接到远程 Jupyter Notebook