Neo4j 的 docker 容器启动如下:根据文档并使用以下命令正常工作:
$ docker run \
--detach \
--publish=7474:7474 \
--publish=7473:7473 \
--publish=7687:7687 \
--volume=$HOME/neo4j/data:/data \
--volume=$HOME/neo4j/logs:/logs \
--volume=$HOME/neo4j/ssl:/ssl \
--ulimit=nofile=40000:40000 \
--name=myname-neo4j \
neo4j:3.1.1
当我尝试执行neo4j-admin
数据库转储我收到一个错误:
$ docker exec -ti myname-neo4j bin/neo4j-admin dump --database=graph.db --to=/home/name/myname.dump
command failed: the database is in use -- stop Neo4j and try again
neo4j-admin dump
但是,如果 Neo4j 进程停止(这似乎是释放数据库的唯一方法),容器就会关闭。这似乎是 Docker 的预期行为。因此,在没有使用数据库的情况下, 似乎不可能从容器内部进行调用。
在仍然使用 Docker 的情况下如何解决这个问题?
答案1
1:停止容器。
docker stop myname-neo4j
2:取出容器
docker rm myname-neo4j
3:以交互模式(-it)运行容器,不使用选项(detach)并执行 shell(/bin/bash)。
docker run \
--publish=7474:7474 \
--publish=7473:7473 \
--publish=7687:7687 \
--volume=$HOME/neo4j/data:/data \
--volume=$HOME/neo4j/logs:/logs \
--volume=$HOME/neo4j/ssl:/ssl \
--ulimit=nofile=40000:40000 \
--name=myname-neo4j \
-it \
neo4j:3.1.1 \
-c /bin/bash
现在您位于 neo4j 容器内,但无需运行 Neo。
4:通过访问 URI 端点来检查 neo 是否已启动(http://你的主机名:7474)。您应该会看到“无法连接”消息。
5:转储数据库
docker exec -ti myname-neo4j bin/neo4j-admin dump --database=graph.db --to=/home/name/myname.dump
答案2
我这样做了:
docker stop [neo4j container]
docker run --name dump --entrypoint="/bin/bash" -it -v $HOME/neo4j/data:/data neo4j:3.1.1 -c "neo4j-admin dump --to=/data/db.dump"
docker start [neo4j container]
然后,您可以保留“转储”容器并重新使用它,或者直接删除它。与入口点和 -c 参数相同的概念也适用于加载过程。
答案3
巧合的是,现在在 Neo4j 4.0 中执行此操作变得更加容易,因为您可以停止和启动数据库,而不必关闭整个 Docker 容器。
因此,如果我们想要转储名为“foo”的数据库,我们可以执行以下操作:
STOP DATABASE foo
docker exec -it our-neo4j-container neo4j-admin dump --database=foo --to=/tmp/foo.db.dump
docker cp our-neo4j-container:/tmp/foo.db.dump .
START DATABASE foo
还以博客文章的形式发布 -https://markhneedham.com/blog/2020/01/28/neo4j-database-dump-docker-container/
答案4
我之前遇到过同样的问题,因此我编写了这个解决方法来转储 neo4j 数据并将其从容器外部拉到主机。
docker rm --force neo4j-dump
docker run \
--name neo4j-dump \
--env-file /storage/bin/.neo4j.env \
--mount type=bind,source=<neo4j_data_folder>,target=/data \
neo4j:3.1.1 bin/neo4j-admin dump --database=graph.db --to=/graph.db.dump
docker cp `docker ps -aqf "name=neo4j-dump"`:/graph.db.dump <target_dump_file>
docker rm --force neo4j-dump
这将创建一个新的容器并转储数据,而不是启动 neo4j 服务,然后将转储复制到主机,只需更新并复制到您的主机即可