首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker组成Config服务器无法通过Spring数据流微服务访问

Docker组成Config服务器无法通过Spring数据流微服务访问
EN

Stack Overflow用户
提问于 2021-07-30 16:03:24
回答 1查看 748关注 0票数 0

可以从localhost:8888访问配置服务器,但是当我在SCDF上部署应用程序时,会发生以下错误:

代码语言:javascript
复制
Fetching config from server at : http://localhost:8888
2021-07-30 14:58:53.535  INFO 143 --- [           main] o.s.b.context.config.ConfigDataLoader    : Connect Timeout Exception on Url - http://localhost:8888. Will be trying the next url if available
2021-07-30 14:58:53.535  WARN 143 --- [           main] o.s.b.context.config.ConfigDataLoader    : Could not locate PropertySource ([ConfigServerConfigDataResource@3de88f64 uris = array<String>['http://localhost:8888'], optional = true, profiles = list['default']]): I/O error on GET request for "http://localhost:8888/backend-service/default": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)

除了配置服务器连接之外,应用程序在SCDF上成功部署。我在SCDF中指定的唯一属性是docker网络。我使用的是spring.config.import,而不是任何引导程序。所有这些在本地部署时都能正常工作,但是当部署在SCDF上时,微服务无法连接到配置服务器。

Spring版本: 2.5.1

应用程序属性

代码语言:javascript
复制
spring.application.name=backend-service
spring.cloud.config.fail-fast=true
spring.cloud.config.retry.max-attempts=6
spring.cloud.config.retry.max-interval=11000
spring.config.import=optional:configserver:http://localhost:8888

配置服务器属性

代码语言:javascript
复制
spring.cloud.config.server.git.uri=...
management.endpoints.web.exposure.include=*
spring.cloud.config.fail-fast=true
spring.cloud.config.retry.max-attempts=6
spring.cloud.config.retry.max-interval=11000
spring.cloud.bus.id=my-config-server
spring.cloud.stream.rabbit.bindings.springCloudBus.consumer.declareExchange=false
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.cloud.bus.enabled=true
spring.cloud.bus.refresh.enabled: true
spring.cloud.bus.env.enabled: true
server.port=8888

docker-compose.yml

代码语言:javascript
复制
version: '3.1'

services:

  h2:
    ...

  rabbitmq-container:
    image: rabbitmq:3.7.14-management
    hostname: dataflow-rabbitmq
    expose:
      - '5672'
    ports:
      - "5672:5672"
      - "15672:15672"
    networks:
      - scdfnet

  dataflow-server:
    ...
    networks:
      - scdfnet

  app-import:
    ...
    networks:
      - scdfnet 
  skipper-server:
    ...
    networks:
      - scdfnet

  configserver-container:
    image: ...
    ports:
      - "8888:8888"
    expose:
      - '8888'
    environment:
      - spring_rabbitmq_host=rabbitmq-container
      - spring_rabbitmq_port=5672
      - spring_rabbitmq_username=guest
      - spring_rabbitmq_password=guest
    depends_on:
      - rabbitmq-container
    networks:
      - scdfnet

networks:
  scdfnet:
    external:
      name: scdfnet

volumes:
     h2-data:
EN

回答 1

Stack Overflow用户

发布于 2021-08-06 16:33:06

对于其他有这个问题的人,我找到了两种解决方法。问题是,一旦Spring应用程序被容器化,属性文件中引用的localhost将导致程序获取应用程序容器虚拟网络的本地主机,而不是本地机器的本地主机。

对于同样的错误,有许多堆栈溢出的答案,但都围绕着引导属性的更正。但是,自Spring 2.4以来,就不再推荐引导上下文初始化。

第一种解决方案是使用IPv4地址而不是本地主机。

代码语言:javascript
复制
spring.config.import=configserver:http://<insert IPv4 address>:8888

例如:

代码语言:javascript
复制
spring.config.import=configserver:http://10.6.39.148:8888

一个比硬连接地址更好的解决方案是引用在docker组合中运行的配置服务器容器:

代码语言:javascript
复制
spring.config.import=optional:configserver:http://configserver-container:8888

确保所有的Docker服务都在同一个网络上运行(在我的例子中是scdf_network),并注意到这个地址只有在docker上运行时才能工作,所以如果要在Eclipse上构建maven文件,您可能需要删除或禁用测试才能成功构建。这可能是不必要的;可能只是有一些属性我未能复制到本地application.properties文件,导致上下文测试失败。根据文档,可选标签应该允许配置客户端运行,即使无法与配置服务器建立联系。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68593968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档