使用 Docker 卷持久化数据

Docker 容器是短暂的。当容器停止时,写入其中的任何数据都会丢失。因此,如果您想在使用 Docker 中的 Neo4j 时持久化数据,您必须将存储挂载到容器中。存储也允许您将数据移入和移出容器。

存储可以通过两种方式挂载到容器中

  • 主机文件系统上的一个文件夹。

  • 一个 Docker 卷 — 一个由 Docker 管理的命名存储位置。

有关如何将存储挂载到 Docker 容器的说明,请参阅官方 Docker 文档 绑定挂载

Neo4j 提供了多个存储挂载点,以简化在 Docker 中使用 Neo4j。以下章节描述了这些挂载点及其使用方法。

Neo4j 挂载点和权限

下表是 Neo4j Docker 镜像识别的所有挂载点以及文件权限的完整参考。

所有列出的挂载点都是可选的。Neo4j 可以在 Docker 中运行,而无需挂载任何卷。然而,对于除了最基本用例之外的所有情况,将存储挂载到 /data 被认为是必不可少的。

如果容器发生任何问题,在没有 /data 挂载的情况下运行容器化 Neo4j 将导致不可恢复的数据丢失

表 1. Neo4j 容器的挂载点
挂载点 所需权限 描述

/data

读、写

Neo4j 数据库的数据存储。参见 将存储挂载到 /data

/logs

读、写

Neo4j 日志的输出目录。参见 将存储挂载到 /logs

/conf

[1]

启动时将配置文件传递给 Neo4j。
参见 修改默认配置

/plugins

[2]

允许您在容器化的 Neo4j 中安装插件。
参见 插件

/licenses

通过挂载许可证文件夹,为 Neo4j 和任何插件提供许可证。
参见 安装插件许可证

/import

使 csv 和其他可导入文件可用于 neo4j-admin import

/ssl

为 Neo4j 提供 SSL 证书以进行消息加密。
参见 Neo4j Docker 容器中的 SSL 加密

/metrics

企业版 指标文件的输出目录。参见 指标

1. 使用 dump-config 功能时需要写入权限。

2. 使用 NEO4J_PLUGINS 功能 下载和存储插件时需要写入权限。

将存储挂载到 /data

Docker 中的 Neo4j 将数据库文件存储在 /data 文件夹中。通过将存储挂载到 /data,写入 Neo4j 的任何数据在容器停止后都将持久化。

停止容器,然后将相同的文件夹挂载到 /data 并重新启动,会启动一个具有相同数据的新容器化 Neo4j 实例。

如果 Neo4j 未能正确关闭,它可能会留下处于错误状态的数据,并很可能在启动时失败。这与在容器外部运行 Neo4j 且未正确关闭的情况相同。

示例 1. 将存储挂载到 /data 挂载点的两种方法
将文件夹挂载到 /data
docker run -it --rm \
   --volume $HOME/neo4j/data:/data \
   neo4j:2025.05.0
创建命名卷并将其挂载到 /data
docker volume create neo4jdata (1)
docker run -it --rm \
   --volume neo4jdata:/data \  (2)
   neo4j:2025.05.0
1 创建一个名为 neo4jdata 的 Docker 卷。
2 将名为 neo4jdata 的卷挂载到 /data

将存储挂载到 /logs

Neo4j 日志输出写入到 /logs 目录中的文件。此目录挂载为 /logs 卷。通过将存储挂载到 /logs,日志文件可在容器外部访问。

有关配置 Neo4j 的更多信息,请参见 配置
有关 Neo4j 日志文件的更多信息,请参见 日志记录

文件权限

出于安全原因,默认情况下,Neo4j 在容器内以 neo4j 用户身份运行。此用户的用户 ID 为 7474。如果 neo4j 需要对已挂载文件夹的读写权限但没有,则该文件夹将自动重新拥有到 7474

这是一个方便的功能,因此您无需担心 Docker 中文件权限的更精细细节,并且可以更轻松地开始使用。但是,这也意味着挂载的文件夹会更改所有权,您可能会发现在没有 root 访问权限的情况下无法再读取您的文件。

带有 --user 标志的 Docker run

docker run 命令的 --user 标志强制 Docker 以提供的用户身份运行。在这种情况下,如果该用户对任何挂载的文件夹没有所需的读写权限,Neo4j 将无法启动。