我正在使用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 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命令。
我被这个问题困扰了很长一段时间。我将非常感谢在这个问题上的任何帮助。
发布于 2018-10-12 06:12:14
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镜像并在最后添加命令,则可以完成相同的操作,这将完成完全相同的操作。这应该要干净得多。
发布于 2018-10-12 14:14:54
似乎您使用的是Neo4j社区版而不是企业版,因此您无法在运行时加载数据库转储。此功能在企业版中是独有的,因此在社区版中您可能需要对其进行调整。
因此,在启动neo4j容器之前,将您的转储文件复制到您要挂载到容器上的路径中,并在docker run上加载它
# 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 --forcehttps://stackoverflow.com/questions/52758820
复制相似问题