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
相关产品推荐
相关产品推荐

