Spring Docker容器连接Neo4j报错:地址格式无效的解决方法
问题分析
你的核心问题是容器化后Spring Neo4j连接地址被自动追加了/neo4j后缀,导致Neo4j Driver报错地址格式无效。本地运行正常是因为Spring Boot未对localhost的URI做自动追加操作,而容器环境下触发了默认数据库名称的拼接逻辑。
解决步骤
1. 修正依赖配置
手动指定spring-data-neo4j版本可能导致与Neo4j Driver版本不兼容,换成Spring Boot官方starter让依赖管理自动匹配兼容版本:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> </dependency>
2. 调整Neo4j连接配置
避免Spring Boot自动向URI追加数据库名称,二选一即可:
方式一:清空默认数据库名称
在配置文件或环境变量中设置:# application.properties spring.neo4j.database=对应环境变量:
SPRING_NEO4J_DATABASE=方式二:直接在URI中指定数据库
将环境变量的URI改为包含默认数据库的格式:SPRING_NEO4J_URI=bolt://registration_db:7687/neo4j
3. 确保容器网络连通性
必须将Spring应用容器和Neo4j容器放入同一个Docker网络,否则registration_db主机名无法被解析:
# 创建自定义网络 docker network create neo4j-network # 启动Neo4j容器 docker run -d --name registration_db --network neo4j-network -e NEO4J_AUTH=neo4j/your_password neo4j:latest # 启动Spring应用容器 docker run -d --name spring-app --network neo4j-network -e SPRING_NEO4J_URI=bolt://registration_db:7687/neo4j -e SPRING_NEO4J_AUTH=neo4j/your_password your_app_image
内容的提问来源于stack exchange,提问作者kat_o4ka
相关产品推荐
相关产品推荐

