在 docker 容器中加载 neo4j 转储

在 docker 容器中加载 neo4j 转储

我正在使用 docker 为我的项目启动多个 neo4j 实例。我有一个要求,我必须将图形转储加载到我的一个 neo4j docker 容器中,并且我必须一次又一次地执行此操作(因为图形转储将由另一组人提供)。

以下是我为了实现同样的目标所采取的步骤 -

    # docker run --publish=7474:7474 --publish=7687:7687 \
    --volume=/home/dimension/neo4j/container3/data:/data \
    --volume=/home/dimension/neo4j/container3/logs:/logs \
    --volume=/home/dimension/neo4j/container3/conf:/conf \
    --volume=/home/dimension/neo4j/container3/plugins:/plugins \
    neo4j:3.3.3

    # docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                                                      NAMES
eee581b2f493        neo4j:3.3.3         "/docker-entrypoint.…"   2 hours ago         Up 2 seconds               0.0.0.0:7474->7474/tcp, 7473/tcp, 0.0.0.0:7687->7687/tcp   priceless_ride

这将启动容器,但数据库是空的。接下来,我尝试了以下操作,将 neo4j 转储加载到我新建的 docker 容器中

# docker stop priceless_ride
priceless_ride

# cp home/dimension/neo4j/dumps/2018-09-05.dump ~/neo4j/container3/data/

# docker run --publish=7474:7474 --publish=7687:7687 \
--volume=/home/dimension/neo4j/container3/data:/data \
--volume=/home/dimension/neo4j/container3/logs:/logs \
--volume=/home/dimension/neo4j/container3/conf:/conf \
--volume=/home/dimension/neo4j/container3/plugins:/plugins \
-i -t neo4j:3.3.3 /bin/bash

上述命令创建一个单独的容器并以交互模式运行该容器。进入容器后,我运行 -

bash-4.4# bin/neo4j-admin load --from=/data/2018-09-05.dump --database=graph.db --force
bash-4.4# exit

现在我执行docker ps -a命令,我将在输出中看到 2 个容器

docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
073c31c75ff5        neo4j:3.3.3         "/docker-entrypoint.…"   8 seconds ago       Exited (0) 3 seconds ago                       focused_zhukovsky
eee581b2f493        neo4j:3.3.3         "/docker-entrypoint.…"   3 hours ago         Exited (0) 7 minutes ago                       priceless_ride

我必须删除新建的容器,因为它不再需要。通过执行docker rm focused_zhukovsky

当我通过执行命令重新启动容器时,一切正常

# docker start priceless_ride

并使用检查浏览器http://127.0.0.1:7474/browser/,容器现在已经从转储中加载了数据库。

按照上述步骤加载图形转储是可以的,但如果我必须一遍又一遍地执行,那就太麻烦了。有没有一种更简洁的方法来加载 neo4j 转储,而无需在交互模式下启动单独的容器,然后触发neo4j-admin load命令。

是否可以在不运行其中的 neo4j 的情况下启动 docker 容器。如果可以的话,我可以进入容器并neo4j-admin load根据需要多次触发命令。

我被这个问题困扰了好久。任何关于这个问题的帮助我都会非常感激。

相关内容