代码之家  ›  专栏  ›  技术社区  ›  Bierbarbar

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

  •  2
  • Bierbarbar  · 技术社区  · 6 年前

    我试着创建一个neo4j的docker图像,当你启动一个容器时,它已经提供了一些数据。对于我的方法,我继承了neo4j docker图像,通过neo4j cypher shell添加了一些数据。但是,当我构建图像并从中运行容器时,数据不会出现在数据库中,而是设置了自定义密码。 这是我当前的文档文件:

    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 回复  |  直到 6 年前
        1
  •  2
  •   Sida Zhou    5 年前

    我在用 Bierbarbar 的方法在克服了以下两个陷阱之后,我终于成功了:

    首先, $NEO4J_HOME/data 被符号链接到 /data ,这似乎有权限问题更改默认数据文件夹:通过添加 dbms.directories.data=mydata 行至 $NEO4J_HOME/conf/neo4j.conf 修正了这个。

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

        2
  •  0
  •   FrobberOfBits    6 年前

    在DockerFile中,这些命令在Docker容器生成时执行。当时没有neo4j docker容器,所以调用cypher shell和数据导入都没有成功的机会所以这种整体的方法是行不通的。

    我建议您使用Neo4j桌面之类的东西在本地构建数据库,然后将数据加载到其中然后复制加载后的graph.db文件夹。并将其附加到docker容器,不需要新的Dockerfile。

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