docker - Cypher 初始化脚本 Neo4j 4.2 docker 不工作
问题描述
我正在尝试参考此文档链接:https ://neo4j.com/labs/apoc/4.2/operational/init-script/
这是我的码头工人命令:
docker run --rm \
--env NEO4J_AUTH="neo4j/test" \
--env NEO4JLABS_PLUGINS='["apoc"]' \
--env NEO4J_apoc_export_file_enabled="true" \
--env NEO4J_apoc_import_file_enabled="true" \
--env NEO4J_apoc_import_file_use__neo4j__config="true" \
--env NEO4J_dbms_directories_import="/" \
--env NEO4J_apoc_initializer_neo4j_1='CALL apoc.cypher.runSchemaFile("file:////var/lib/neo4j/db_init_scripts/db_ddls.cypher");' \
--env NEO4J_apoc_initializer_neo4j_2='CALL apoc.cypher.runFile("file:////var/lib/neo4j/db_init_scripts/db_schema.cypher");' \
--name neo4j \
neo4j:cus
其中 neo4j:cus 是我的自定义图像,我将所需的密码文件复制到neo4j:4.2图像中
我的 db_ddl.cypher 已创建索引:
CREATE CONSTRAINT idx_person_unq IF NOT EXISTS ON (p:Person) ASSERT p.name IS UNIQUE;
我的 db_schema.cypher 有模式创建:
MERGE (p:Person {name: "Inital Person"});
当我尝试启动容器时,我收到以下消息:
Unrecognized setting. No declared setting with name: apoc.initializer.cypher.1
Unrecognized setting. No declared setting with name: apoc.initializer.cypher.2
当我尝试使用旧版本的环境变量时:
--env NEO4J_apoc_initializer_cypher_1='CALL apoc.cypher.runSchemaFile("file:////var/lib/neo4j/db_init_scripts/db_schema.cypher");' \
--env NEO4J_apoc_initializer_cypher_2='CALL apoc.cypher.runFile("file:////var/lib/neo4j/db_init_scripts/db_ddls.cypher");' \
我明白了:
Unrecognized setting. No declared setting with name: apoc.initializer.cypher.1
Unrecognized setting. No declared setting with name: apoc.initializer.cypher.2
但是当我尝试只运行一个密码时:
--env NEO4J_apoc_initializer_cypher='CALL apoc.cypher.runSchemaFile("file:////var/lib/neo4j/db_init_scripts/db_ddls.cypher");' \
然后它工作。
这就是我的 conf/neo4j.conf 的样子:
root@4f8955759b52:/var/lib/neo4j# grep apoc conf/neo4j.conf
#dbms.security.procedures.allowlist=apoc.coll.*,apoc.load.*,gds.*
apoc.initializer.neo4j.1=CALL apoc.cypher.runFile("file:////var/lib/neo4j/db_init_scripts/db_schema.cypher");
apoc.initializer.neo4j.0=CALL apoc.cypher.runSchemaFile("file:////var/lib/neo4j/db_init_scripts/db_ddls.cypher");
apoc.import.file.use_neo4j_config=true
apoc.import.file.enabled=true
apoc.export.file.enabled=true
dbms.security.procedures.unrestricted=apoc.*
谁能指出我缺少的东西,以便我既可以创建索引也可以初始化一些模式?
谢谢
解决方案
好吧,只有当您创建一个单独的 apoc.conf 文件并将其放在 neo4j.conf 旁边时,此行为才有效
我的 apoc.conf 现在看起来像这样:
apoc.initializer.neo4j.1=CALL apoc.cypher.runSchemaFile("file:////var/lib/neo4j/db_init_scripts/db_ddls.cypher")
apoc.initializer.neo4j.2=CALL apoc.cypher.runFile("file:////var/lib/neo4j/db_init_scripts/db_schema.cypher");
日志文件有输出:
2021-05-26 18:51:06.068+0000 INFO [neo4j/c0fb7489] successfully initialized: CALL apoc.cypher.runSchemaFile("file:////var/lib/neo4j/db_init_scripts/db_ddls.cypher")
2021-05-26 18:51:06.882+0000 INFO Remote interface available at http://localhost:7474/
2021-05-26 18:51:06.892+0000 INFO Started.
2021-05-26 18:51:08.091+0000 INFO [neo4j/c0fb7489] successfully initialized: CALL apoc.cypher.runFile("file:////var/lib/neo4j/db_init_scripts/db_schema.cypher");
推荐阅读
- javascript - TensorFlow JS - 加载使用 Python 生成的模型
- sql - 如何选择已借阅所有书籍的会员
- reactjs - 显示加载器直到页面完全加载反应
- python - Docker X11 Forward 得到黑屏
- java - Java JNI 错误 java.lang.UnsupportedClassVersionError
- javascript - 使用 nodejs/npm start 在哪里查看 console.log 输出?
- android - React Native Metro 捆绑器不会自动启动仅适用于 android
- sql-server - Entity Framework .Database.Initialize(true) 在 Azure 上工作时不创建表
- jquery - 将活动类添加到li a jquery
- angular - 角度分离登录和应用程序组件