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

SpringBoot应用与Neo4j容器化部署连接问题求助

解决方案:Spring Boot + Neo4j 容器化连接失败问题

核心问题分析

报错显示Unable to connect to localhost:7687,但你配置的是host.docker.internal,说明实际生效的连接地址是localhost,要么是配置未正确加载,要么是Docker网络内的服务访问方式错误。

分步解决方案

1. 修正Docker网络内的Neo4j访问地址

在同一docker-compose.yml定义的服务属于同一默认网络,直接使用服务名作为主机名即可访问,无需host.docker.internal(该地址用于容器访问宿主机服务)。

修改application.properties:

# 替换原有的spring.data.neo4j.uri
spring.neo4j.uri=bolt://myneo4j:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=12345678

注意:Spring Boot 3.x + Neo4j 5.x 推荐使用spring.neo4j.uri而非spring.data.neo4j.uri,后者是旧版本配置键,可能导致配置不生效。

2. 确保Neo4j服务完全就绪后启动Spring Boot

depends_on仅保证容器启动顺序,不等待Neo4j服务初始化完成。给Neo4j添加健康检查,让Spring Boot等待其就绪:

更新docker-compose.yml的myneo4j服务:

myneo4j:
  image: neo4j:5.15.0
  container_name: "myneo4j"
  ports:
    - 7474:7474
    - 7687:7687
  restart: unless-stopped
  environment:
    - NEO4J_AUTH=neo4j/12345678
  volumes:
    - ./db/data:/data
    - ./db/conf:/conf
    - ./db/logs:/logs
    - ./db/plugins:/plugins
  healthcheck:
    test: ["CMD-SHELL", "curl -f http://localhost:7474 || exit 1"]
    interval: 10s
    timeout: 5s
    retries: 5

同时修改springboot-neo4j服务的depends_on:

springboot-neo4j:
  image: springboot-neo4j:1.0
  container_name: springboot-neo4j
  depends_on:
    myneo4j:
      condition: service_healthy
  ports:
    - 3002:3002

移除links配置,Docker Compose v3+默认通过服务名实现服务发现,links已被废弃。

3. 验证Spring Boot镜像的配置正确性

  • 确认application.properties位于src/main/resources目录,打包时被正确包含进镜像。
  • 检查是否有环境变量、启动参数或其他Profile配置覆盖了neo4j.uri,比如启动命令中是否传入了--spring.neo4j.uri=bolt://localhost:7687。

4. 额外排查步骤

  • 进入Spring Boot容器,执行ping myneo4j验证网络连通性:
    docker exec -it springboot-neo4j ping myneo4j
    
  • 查看Neo4j容器日志,确认服务正常启动:
    docker logs myneo4j
    

内容的提问来源于stack exchange,提问作者Ryan Pham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:14:58