Docker Compose环境下Spring应用无法连接Cloud Config Server
Spring应用Docker部署后无法连接Cloud Config Server的解决方案
问题核心
报错 Caused by: org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://config:8888/application/local/main": Connection refused,主要原因是业务应用与配置服务器不在同一个Docker网络,同时bootstrap配置存在不合理项。
修复步骤
1. 确保两个服务在同一Docker网络
你的docker-compose.yml中,config服务加入了vd-network,但app服务未配置网络,导致两者处于不同默认网络,无法通过服务名config通信。修改app服务配置:
services: # ... 其他服务 ... app: image: my-image ports: - "9000:9000" networks: - vd-network # 添加这一行,加入和config相同的网络
2. 修正bootstrap-docker.yaml配置
application.name需改为你的业务应用名称(而非config,config是配置服务器的应用名),否则会错误拉取配置服务器自身的配置- 统一
config.import与cloud.config.uri的配置逻辑,避免冲突 - 若使用Spring Boot 2.4+版本,需确保引入
spring-cloud-starter-bootstrap依赖(否则bootstrap配置不会生效)
修正后的配置示例:
spring: application: name: your-app-name # 替换为你的业务应用名称 cloud: config: failFast: true profile: ${profile:local} debug: true uri: ${config.host:http://config:8888} label: main config: import: optional:configserver:${config.host:http://config:8888}
3. 验证Config Server可用性
在Config Server启动后,通过本地访问确认其正常运行:
curl http://localhost:8888/your-app-name/local/main
若能返回配置内容,说明配置服务器本身无问题;若返回错误,需检查Git仓库地址、账号密码等环境变量是否正确。
完整配置示例
修改后的docker-compose.yml
networks: vd-network: services: config: image: hyness/spring-cloud-config-server:3.1.3-jdk11 deploy: labels: description: "Spring Cloud Config Server" mode: replicated restart_policy: condition: on-failure networks: - vd-network environment: - SPRING_APPLICATION_NAME=config - SERVER_PORT=8888 - SPRING_CLOUD_CONFIG_SERVER_GIT_URI=<URI> - SPRING_CLOUD_CONFIG_SERVER_GIT_REFRESH-RATE=3 - SPRING_CLOUD_CONFIG_SERVER_GIT_USERNAME=<NAME> - SPRING_CLOUD_CONFIG_SERVER_GIT_PASSWORD=<PASSWORD> - SPRING_CLOUD_CONFIG_SERVER_GIT_DEFAULT-LABEL=main - SPRING_CLOUD_CONFIG_SERVER_GIT_SKIPSSLVALIDATION=true - ENCRYPT_KEY=<KEY> ports: - "8888:8888" app: image: my-image ports: - "9000:9000" networks: - vd-network
修正后的bootstrap-docker.yaml
spring: application: name: your-app-name cloud: config: failFast: true profile: ${profile:local} debug: true uri: ${config.host:http://config:8888} label: main config: import: optional:configserver:${config.host:http://config:8888}
内容的提问来源于stack exchange,提问作者Q_Q_
相关产品推荐
相关产品推荐

