当您启动容器时,我尝试创建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图像中的体积,也许可以做些什么?
答案 0 :(得分:2)
我正在使用Bierbarbar的方法。我克服了以下两个陷阱后就可以使用它了:
首先,将$NEO4J_HOME/data
链接到/data
,这似乎存在权限问题。更改默认数据文件夹:通过向dbms.directories.data=mydata
添加$NEO4J_HOME/conf/neo4j.conf
行来解决此问题。
其次,确保data.cypher
文件包含用于密文壳的正确格式:1)每个密文状态的末尾都需要用分号; 2):begin
的某些版本(或所有版本?)中有:commit
和cypher-shell
命令
答案 1 :(得分:0)
在您的Dockerfile中,这些命令在Docker容器构建时发生。那时,没有neo4j docker容器,因此对cypher-shell和数据导入的调用没有成功的机会。因此,这种总体方法将行不通。
我建议您使用Neo4j Desktop之类的东西在本地构建数据库,然后将数据加载到其中。然后,获取由加载产生的graph.db文件夹的副本。并将其附加到Docker容器,不需要新的Dockerfile。
此外,还有一些配置选项可以从外部设置默认密码,因此您也不需要neo4j-admin部分。