问题描述
想要基于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的方法。
以上是两种常见的持久化更改的方法,你可以根据自己的需求选择适合的方法。希望对你有帮助!