Docker Compose环境中LangChain集成Neo4j遭遇连接拒绝错误
我注意到你在Docker Compose环境下,使用LangChain的Neo4jVector组件连接本地Neo4j容器时碰到了连接拒绝的问题,但直接调用Neo4j官方的GraphDatabase.driver却能正常连通。咱们一步步拆解问题,找到解决方案:
最可能的问题:环境变量名称不匹配
你用原生Neo4j驱动时,使用的是容器名称neo4j_database作为主机地址(bolt://neo4j_database:7687),这在Docker Compose的同一网络里是正确的配置。但仔细看你的代码和环境配置,发现了变量名不一致的问题:
- LangChain代码里读取的是
NEO4J_URL:URI = os.getenv("NEO4J_URL") - 你手动设置的环境变量却是
NEO4J_URI=bolt://172.20.0.3:7687,同时docker-compose.yaml里web服务的环境变量又写的是NEO4J_URL: "bolt://neo4j_database:7687"
另外,在Docker Compose网络里,用容器名称作为主机名比固定IP更可靠——容器重启后IP可能会变化,但容器名称是稳定的。
修复步骤:
- 统一环境变量:把你的
.env文件里的变量名改成NEO4J_URL=bolt://neo4j_database:7687,和docker-compose中的配置保持一致 - 确认代码读取的变量名正确(你当前的代码已经是读
NEO4J_URL,只要.env里的变量名匹配即可)
检查Neo4jVector的连接参数
LangChain的Neo4jVector类使用url参数接收连接地址,你代码里的url=URI是正确的,但可以运行时留意你打印的URI输出,确认它确实是bolt://neo4j_database:7687。
确认Neo4j容器的网络配置
你的docker-compose里的Neo4j配置已经设置了监听所有接口:
- NEO4J_dbms_connector_bolt_listen__address=0.0.0.0:7687 - NEO4J_dbms_default__listen__address=0.0.0.0
这部分没问题,同一Docker网络内的web容器可以正常访问。
排除Embedding模型的干扰
你代码里打印了Embedding model initialized successfully.,说明Ollama的embedding模块没有问题,错误确实出在Neo4j的连接环节。
验证修改效果
修改环境变量后,重启Docker Compose服务:
docker-compose down && docker-compose up --build
再运行你的LangChain代码测试连接。如果还是有问题,可以先在代码里硬编码URI为bolt://neo4j_database:7687,排除环境变量读取的问题。
备注:内容来源于stack exchange,提问作者Binit Sapkota

