Neo4j Docker镜像持久化更改

90次阅读
没有评论

问题描述

想要基于neo4j:latest镜像创建一个新的镜像,并希望能够持久化更改并运行基于该镜像的容器。他有以下目标:
– 保存新分配给数据库的密码。
– 保留数据库中存储的数据。
用户使用的是Windows 10操作系统和Docker Community Edition Version 18.06.0-ce-win72 (19098)。
以下是用户尝试过的方法:
1. 从neo4j:latest启动一个容器。
2. 使用浏览器连接到Neo4j,并设置了一个新密码。
3. 使用在主机上运行的脚本将数据加载到数据库中,并验证数据库中包含节点和关系。
4. 将容器提交为一个新的镜像。
5. 将镜像推送到用户的仓库。
6. 运行该镜像。
7. 使用浏览器连接到Neo4j。

用户期望的结果是不需要输入新密码,并且数据保持完整。但实际上,用户需要输入新密码,并且数据库中的节点和关系丢失了。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据Neo4j官方文档中的说明,我们可以通过将/data目录挂载到主机上来实现数据的持久化。以下是一个示例:

docker run \
    --publish=7474:7474 --publish=7687:7687 \
    --volume=/path/to/neo4j/data:/data \
    --volume=/path/to/neo4j/logs:/logs \
    neo4j:latest

在上面的示例中,我们使用--volume选项将/data目录挂载到主机上的/path/to/neo4j/data目录,并将/logs目录挂载到主机上的/path/to/neo4j/logs目录。这样就可以将数据持久化到主机上,以便在容器重新启动时保留数据。
请注意,/path/to/neo4j是主机上的一个物理目录,你需要将其替换为你自己的目录路径。

方案2

根据Neo4j官方文档中的说明,你可以在运行容器时设置初始密码。以下是一个示例:

docker run \
    --publish=7474:7474 --publish=7687:7687 \
    --env NEO4J_AUTH=neo4j/<password> \
    --volume=/path/to/neo4j/data:/data \
    --volume=/path/to/neo4j/logs:/logs \
    neo4j:latest

在上面的示例中,我们使用--env选项设置了初始密码。你需要将<password>替换为你想要设置的密码。这样,在容器启动时,Neo4j将使用指定的密码进行身份验证。

无论使用哪种方案,你都可以通过将/data目录导出为一个tar文件来备份数据。然后,你可以将该tar文件推送到Docker Hub或其他地方进行存储。

请注意,目前还没有一种直接将卷推送到Docker Hub的方法。

以上是两种常见的持久化更改的方法,你可以根据自己的需求选择适合的方法。希望对你有帮助!

正文完