我正在使用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 dump加载到新构建的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 dump而不需要启动单独的交互式模式容器,然后发出neo4j-admin load
命令。
是否可能在不运行其中的neo4j的情况下启动docker容器。如果这是可能的,那么我可以进入容器并随意多次执行neo4j-admin load
命令。
我已经被这个问题困扰了一段时间。非常感谢对此问题的任何帮助。