You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose部署Spring Cloud Datastore出现Connection refused报错

问题根因

Docker Compose 部署的服务默认运行在独立桥接网络中,每个容器持有独立的网络命名空间:

  • 宿主机浏览器访问localhost:8081正常,是因为Docker将datastore容器的8432端口映射到了宿主机8081端口,此处的localhost指代宿主机本身
  • 运行在application容器内的Spring应用,配置中填写的localhost:8081会指向application容器自身的8081端口,该端口无服务监听,因此触发连接拒绝错误
解决方案

按以下步骤调整配置即可:

1. 修改Spring配置文件

将Datastore连接地址中的localhost替换为docker-compose中定义的datastore服务名,Docker内置DNS会自动将服务名解析为对应容器的内网IP,端口填写datastore容器内部的监听端口而非宿主机映射端口:

spring:
  cloud:
    gcp:
      project-id: test-project
      datastore:
        host: http://datastore:8432
        emulator:
          enabled: true
          port: 8432

若使用的Spring Cloud GCP版本不支持host字段带http前缀,将host值改为datastore:8432即可。

2. (可选)优化docker-compose配置

  • 若不需要在宿主机直接访问Datastore模拟器,可以删除datastore服务下的ports端口映射段,仅保留容器内网通信,减少不必要的端口暴露
  • 建议在application服务下添加depends_on配置,保证Datastore模拟器先启动再拉起应用,避免启动顺序导致的临时连接失败,调整后配置参考:
services:
  application:
    image: openjdk:17
    ports:
      - 9000:8080 # HTTP
    volumes:
      - ${BASE_PATH:-.}/build/libs/application.jar
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:8080/health-check" ]
      interval: 10s
      timeout: 10s
      retries: 30
      start_period: 10s
    depends_on:
      - datastore

  datastore:
    image: knarz/datastore-emulator
    ports:
      - 8081:8432
    environment:
      CONSISTENCY: 1 # 模拟器使用强一致性模型,省略则默认模拟最终一致性

连通性验证

配置修改完成重启服务后,可执行以下命令进入application容器内部验证网络连通性:

  • 进入容器:docker compose exec application bash
  • 测试Datastore连接:curl http://datastore:8432
    命令返回ok即代表容器间网络通信正常,应用可正常调用Datastore服务。

内容的提问来源于stack exchange,提问作者Mateusz Sikora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:27:21