使用 Docker 卷持久化数据

Docker 容器是临时的。当容器停止时,写入其中的任何数据都会丢失。因此,如果您想在使用 Docker 运行 Neo4j 时持久化数据,则必须将存储挂载到容器中。存储还可以让您在容器内外存取数据。

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

  • 宿主机文件系统上的文件夹。

  • Docker 数据卷(Volume)— 由 Docker 管理的命名存储位置。

有关如何将存储挂载到 Docker 容器的说明,请参阅 Docker 官方文档:绑定挂载 (Bind mounts)数据卷 (Volumes)

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

write

企业版 (Enterprise Edition) 指标文件的输出目录。请参阅 指标

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:2026.03.1
创建命名数据卷并将其挂载到 /data
docker volume create neo4jdata (1)
docker run -it --rm \
   --volume neo4jdata:/data \  (2)
   neo4j:2026.03.1
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 将无法启动。