首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在停靠容器中加载neo4j转储时出现问题

在停靠容器中加载neo4j转储时出现问题
EN

Stack Overflow用户
提问于 2018-10-11 19:22:44
回答 2查看 1.4K关注 0票数 2

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

这些是我为了做同样的事情而遵循的步骤-

代码语言:javascript
复制
    # 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转储加载到新构建的停靠容器中

代码语言:javascript
复制
# 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

上面的命令创建了一个单独的容器,并以交互模式运行该容器。一旦我进入容器,我就会运行-

代码语言:javascript
复制
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个容器

代码语言:javascript
复制
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

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

代码语言:javascript
复制
# docker start priceless_ride

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

按照上面的步骤加载图形转储是可以的,但如果我必须一次又一次地这样做,那就太麻烦了。是一种更简洁的加载neo4j转储的方式,而不需要在交互模式下启动一个单独的容器,然后触发neo4j-admin load命令。

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

我被这个问题困扰了很长一段时间。我将非常感谢在这个问题上的任何帮助。

EN

回答 2

Stack Overflow用户

发布于 2018-10-12 06:12:14

代码语言:javascript
复制
docker run  -d --publish=7474:7474 --publish=7687:7687 --volume=$HOME/neo4j/datanew:/data neo4j /bin/bash -c "[ -f /data/db.dump ] && /var/lib/neo4j/bin/neo4j-admin load --from=/data/db.dump --database=graph.db --force; neo4j console"

您可以将-c命令与/bin/bash一起使用来执行多个命令。在此neo4j启动之后。

考虑到在$HOME/datanew目录中有一个名为db.dump的数据库转储,ne4j-admin应该能够在启动neo4j服务器之前加载它。

如果您基于neo4j镜像创建docker镜像并在最后添加命令,则可以完成相同的操作,这将完成完全相同的操作。这应该要干净得多。

票数 2
EN

Stack Overflow用户

发布于 2018-10-12 14:14:54

似乎您使用的是Neo4j社区版而不是企业版,因此您无法在运行时加载数据库转储。此功能在企业版中是独有的,因此在社区版中您可能需要对其进行调整。

因此,在启动neo4j容器之前,将您的转储文件复制到您要挂载到容器上的路径中,并在docker run上加载它

代码语言:javascript
复制
# 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 \
    -it neo4j:3.3.3 /bin/bash -c "[ -f /data/db.dump ] \
    && /var/lib/neo4j/bin/neo4j-admin load --from=/data/db.dump \
    --database=graph.db --force
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52758820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档