如何在 Docker 容器中执行 Neo4j 数据库的转储?

Gre*_*ski 8 neo4j docker

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
Run Code Online (Sandbox Code Playgroud)

当我尝试执行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
Run Code Online (Sandbox Code Playgroud)

但是,如果 Neo4j 进程停止(这似乎是释放数据库的唯一方法),容器将关闭。这似乎是 Docker 的预期行为。因此,neo4j-admin dump在没有使用数据库的情况下,从容器内部调用似乎是不可能的。

在仍然使用 Docker 的同时如何解决这个问题?

小智 7

1:停止容器。

docker stop myname-neo4j
Run Code Online (Sandbox Code Playgroud)

2:取出容器

docker rm myname-neo4j
Run Code Online (Sandbox Code Playgroud)

3:以交互模式(-it)运行容器,不带选项(分离)并执行外壳( /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
Run Code Online (Sandbox Code Playgroud)

现在您在 neo4j 容器内,无需运行 Neo。

4:通过访问 ( http://yourhost:7474 ) 中的 URI 端点来检查 neo 是否已启动。您应该会看到“无法连接”消息。

5:转储你的数据库

docker exec -ti myname-neo4j bin/neo4j-admin dump --database=graph.db --to=/home/name/myname.dump
Run Code Online (Sandbox Code Playgroud)