Spring Boot集成Neo4j docker-compose配置APOC过程缺失报错排查
问题根因
报错提示apoc.algo.dijkstra过程未注册,本质是APOC插件没有被Neo4j正确加载,由3个配置问题导致:
- 卷挂载覆盖插件文件:配置了
$HOME/neo4j/plugins:/plugins的宿主机目录映射,如果宿主机该目录为空,容器启动时通过NEO4JLABS_PLUGINS自动下载的APOC插件会被空目录覆盖,最终容器内不存在插件jar包。 - 配置转义错误:
NEO4J_dbms_security_procedures_unrestricted中写了三层反斜杠转义通配符*,docker-compose解析后配置值不符合要求,插件的执行权限没有被正确放开。 - Bolt监听配置不合理:原配置中Bolt监听地址写为
neo4j-db:7687,可能导致监听地址绑定异常,后续应用连接或插件加载时出现隐性问题。
修复方案
按以下步骤操作即可解决:
- 清理旧的宿主机挂载目录,避免残留文件干扰:
rm -rf $HOME/neo4j - 修改docker-compose.yml中Neo4j服务的配置,修正后的完整配置如下:
version: '3' services: neo4j-db: image: neo4j:4.1 container_name: app-neo4j-db ports: - 7474:7474 - 7687:7687 volumes: - $HOME/neo4j/data:/data - $HOME/neo4j/logs:/logs - $HOME/neo4j/import:/import - $HOME/neo4j/plugins:/plugins environment: NEO4J_AUTH: "neo4j/123456" NEO4JLABS_PLUGINS: '["apoc"]' # 修正转义符,通配符不需要多层反斜杠转义 NEO4J_dbms_security_procedures_unrestricted: apoc.*,gds.* # 修正Bolt监听地址为0.0.0.0,确保所有网卡地址可正常监听 dbms_connector_bolt_listen__address: 0.0.0.0:7687 dbms_connector_bolt_advertised__address: neo4j-db:7687 healthcheck: test: cypher-shell --username neo4j --password 123456 'MATCH (n) RETURN COUNT(n);' interval: 10s timeout: 10s retries: 5 app: image: 'springbootneo4jshortestpath:latest' build: context: . dockerfile: Dockerfile container_name: SpringBootNeo4jShortestPath depends_on: neo4j-db: condition: service_healthy links: - neo4j-db environment: NEO4J_URI: bolt://neo4j-db:7687 NEO4J_USER: neo4j NEO4J_PASSWORD: 123456 volumes: app-neo4j-db: - 重新执行启动命令拉起容器:
docker-compose up -d - 验证插件加载状态,容器启动完成后执行以下命令进入Neo4j的cypher交互界面:
执行查询语句docker exec -it app-neo4j-db cypher-shell -u neo4j -p 123456RETURN apoc.version();,如果能正常返回4.1.x格式的版本号,说明APOC插件加载成功,此时再调用Dijkstra最短路径算法就不会抛出过程不存在的错误。
补充:如果遇到NEO4JLABS_PLUGINS自动下载APOC速度慢、下载失败的情况,可以手动下载和Neo4j 4.1版本完全匹配的APOC jar包(命名格式为
apoc-4.1.x.x-all.jar,小版本号需要和所用Neo4j镜像版本对齐),直接放到宿主机$HOME/neo4j/plugins目录下再启动容器即可,不需要依赖自动下载逻辑。
内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu
相关产品推荐
相关产品推荐

