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

Py2neo连接AWS EC2上的Neo4j报错,本地运行正常求助

提问:Py2neo连接EC2上的Neo4j报错,本地正常

过去几个月我一直在本地机器上运行Neo4j,使用Py2neo通过Python管理数据库。刚将数据库迁移到AWS EC2实例后,发送请求时持续报错。

本地运行正常的测试代码:

from py2neo import *

neo4j_url = 'http://localhost:7474/'
user = 'neo4j'
pwd = 'neo4j'

graph = Graph(neo4j_url, auth=(user,pwd))
print(graph)
graph.run("Create (n:Person{name: 'Andy person'})")

EC2上执行时的错误:

Graph('http://localhost:7474')
Traceback (most recent call last):
  File "/home/ec2-user/KG_construction/kg-construction/KG_env/lib64/python3.8/site-packages/py2neo/client/http.py", line 443, in from_json
    content = json_loads(data, object_hook=JSONHydrant.json_to_packstream)
  File "/usr/lib64/python3.8/json/__init__.py", line 370, in loads
    return cls(**kw).decode(s)
  File "/usr/lib64/python3.8/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python3.8/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "test_connection.py", line 9, in <module>
    graph.run("Create (n:Person{name: 'Andy person'})")
  File "/home/ec2-user/KG_construction/kg-construction/KG_env/lib64/python3.8/site-packages/py2neo/database.py", line 405, in run
    return self.auto().run(cypher, parameters, **kwparameters)
  File "/home/ec2-user/KG_construction/kg-construction/KG_env/lib64/python3.8/site-packages/py2neo/database.py", line 989, in run
    result = self._connector.auto_run(cypher, parameters,
  File "/home/ec2-user/KG_construction/kg-construction/KG_env/lib64/python3.8/site-packages/py2neo/client/__init__.py", line 1340, in auto_run
    return cx.auto_run(cypher, parameters, graph_name=graph_name, readonly=readonly)
  File "/home/ec2-user/KG_construction/kg-construction/KG_env/lib64/python3.8/site-packages/py2neo/client/http.py", line 177, in auto_run
    rs = HTTPResponse.from_json(r.status, r.data.decode("utf-8"))
  File "/home/ec2-user/KG_construction/kg-construction/KG_env/lib64/python3.8/site-packages/py2neo/client/http.py", line 445, in from_json
    raise_from(ProtocolError("Cannot decode response content as JSON"), error)
  File "<string>", line 3, in raise_from
py2neo.errors.ProtocolError: Cannot decode response content as JSON

请问为何该错误仅在EC2实例上出现,本地却能正常运行?


回答

这个错误核心是Py2neo无法解析Neo4j返回的响应(空内容或非JSON格式),结合EC2环境特性,按以下步骤排查:

1. 检查Neo4j监听配置

默认情况下,部分Neo4j配置可能仅绑定特定IP,即使在EC2本地访问localhost也可能无法连接:

  • 打开Neo4j配置文件(通常路径为/etc/neo4j/neo4j.conf或安装目录下的conf/neo4j.conf)
  • 找到dbms.default_listen_address,将值改为0.0.0.0(允许监听所有网络接口)
  • 重启Neo4j服务:sudo systemctl restart neo4j

2. 验证Neo4j服务状态与本地可访问性

在EC2实例上直接测试Neo4j接口,确认服务是否正常响应:

  • 检查服务状态:sudo systemctl status neo4j,确保服务处于active状态
  • 用curl发送请求:curl http://localhost:7474/db/data/
    • 返回包含Neo4j版本信息的JSON说明服务正常;返回空或非JSON文本则说明Neo4j启动异常或配置有误

3. 确认凭证正确性

EC2上的Neo4j首次启动时通常会强制修改默认密码,不要直接沿用本地的neo4j/neo4j:

  • 通过Neo4j浏览器或neo4j-admin工具确认凭证有效
  • 确保代码中的用户名和密码与EC2上Neo4j的实际凭证一致

4. 核对版本兼容性

不同版本的Py2neo和Neo4j存在协议差异,可能导致解析失败:

  • 查看本地和EC2上的Py2neo版本:pip show py2neo
  • 查看Neo4j版本:neo4j version
  • 确保两者版本匹配(比如Py2neo 5.x对应Neo4j 5.x系列,Py2neo 2021.x对应Neo4j 4.x)

5. 排查本地防火墙限制

部分EC2实例可能启用了iptables或firewalld,拦截了本地7474端口请求:

  • 临时关闭防火墙测试:sudo systemctl stop firewalld(测试完成后记得重新开启)
  • 或添加允许本地访问的规则:sudo iptables -A INPUT -p tcp --dport 7474 -s 127.0.0.1 -j ACCEPT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:55:25