使用来自cypher文件的初始数据创建自定义Neo4j Docker映像

时间:2018-07-23 20:02:08

标签: docker neo4j dockerfile

当您启动容器时,我尝试创建neo4j的docker映像,该映像已经提供了一些数据。对于我的方法,我继承自neo4j docker映像,并通过neo4j cypher shell添加了一些数据。但是,当我构建映像并从中运行容器时,数据未出现在数据库中,但是设置了自定义密码。 这是我当前的dockerfile:

From neo4j:3.4
ENV NEO4J_AUTH=neo4j/password
COPY data.cypher /var/lib/neo4j/import/
USER neo4j
RUN bin/neo4j-admin set-initial-password password || true && \
    bin/neo4j start && sleep 5 && \
    cat /var/lib/neo4j/import/data.cypher | NEO4J_USERNAME=neo4j NEO4J_PASSWORD=password /var/lib/neo4j/bin/cypher-shell --fail-fast
CMD [neo4j]

我还在data.cypher文件中添加了一个匹配查询,以确保shell将数据添加到neo4j中。将/data定义为neo4j图像中的体积,也许可以做些什么?

2 个答案:

答案 0 :(得分:2)

我正在使用Bierbarbar的方法。我克服了以下两个陷阱后就可以使用它了:

首先,将$NEO4J_HOME/data链接到/data,这似乎存在权限问题。更改默认数据文件夹:通过向dbms.directories.data=mydata添加$NEO4J_HOME/conf/neo4j.conf行来解决此问题。

其次,确保data.cypher文件包含用于密文壳的正确格式:1)每个密文状态的末尾都需要用分号; 2):begin的某些版本(或所有版本?)中有:commitcypher-shell命令

答案 1 :(得分:0)

在您的Dockerfile中,这些命令在Docker容器构建时发生。那时,没有neo4j docker容器,因此对cypher-shell和数据导入的调用没有成功的机会。因此,这种总体方法将行不通。

我建议您使用Neo4j Desktop之类的东西在本地构建数据库,然后将数据加载到其中。然后,获取由加载产生的graph.db文件夹的副本。并将其附加到Docker容器,不需要新的Dockerfile。

此外,还有一些配置选项可以从外部设置默认密码,因此您也不需要neo4j-admin部分。