我正在使用 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
根据需要多次触发命令。
我被这个问题困扰了好久。任何关于这个问题的帮助我都会非常感激。