修改默认配置

Neo4j 镜像提供的默认配置旨在用于学习 Neo4j,但必须进行修改才能适用于生产环境。特别是 Neo4j 的默认内存分配非常有限(NEO4J_server_memory_pagecache_size=512MNEO4J_server_memory_heap_max__size=512M),这是为了允许在同一台服务器上运行多个容器。您可以在 Docker 特定配置设置中阅读有关配置 Neo4j 的更多信息。

修改配置有三种方法

  • 设置环境变量。

  • 挂载 /conf 卷。

  • 构建新镜像。

选择哪种方法取决于您需要对镜像进行多大程度的自定义。

对于生产环境,建议使用后两种方法之一,替换整个配置文件。这可以在镜像的默认配置发生更改或添加时提供稳定性。

环境变量

在运行容器时将环境变量传递给容器,例如

docker run \
    --detach \
    --publish=7474:7474 --publish=7687:7687 \
    --volume=$HOME/neo4j/data:/data \
    --volume=$HOME/neo4j/logs:/logs \
    --env NEO4J_dbms_memory_pagecache_size=4G \
    neo4j:2026.03.1

任何配置值(请参阅 配置设置)都可以使用以下命名方案进行传递

  • 前缀为 NEO4J_

  • 下划线必须写两次:_ 写为 __

  • 句点转换为下划线:. 写为 _

例如,可以通过向 Docker 指定以下参数来设置 db.tx_log.rotation.size

--env NEO4J_db_tx__log_rotation_size

可以采用多个选项的变量(例如 NEO4J_server_jvm_additional)必须仅定义一次,并包含多个值的串联。例如

--env NEO4J_server_jvm_additional="-Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=$HOME/conf/jmx.password -Dcom.sun.management.jmxremote.access.file=$HOME/conf/jmx.access -Dcom.sun.management.jmxremote.port=3637"

通过环境变量设置的 Docker 额外 JVM 配置不会覆盖默认的 JVM 配置,而是追加到它们后面。

挂载 /conf

要对 Neo4j 配置进行任意修改,请为容器提供一个 /conf

docker run \
    --detach \
    --publish=7474:7474 --publish=7687:7687 \
    --volume=$HOME/neo4j/data:/data \
    --volume=$HOME/neo4j/logs:/logs \
    --volume=$HOME/neo4j/conf:/conf \
    neo4j:2026.03.1

/conf 卷中的配置文件会覆盖镜像提供的文件。因此,如果您想更改文件中的一个值,必须确保文件的其余部分完整且正确。通过 Docker 传递给容器的环境变量会覆盖 /conf 卷中配置文件里的值。

如果您使用配置卷,则必须确保监听所有网络接口。这可以通过设置 server.default_listen_address=0.0.0.0 来完成。

要导出初始的配置文件集,请使用 dump-config 命令运行该镜像。您必须将 $HOME/neo4j/conf 的所有者设置为 neo4j 用户,以允许来自 Neo4j Docker 容器的写入访问权限

sudo chown neo4j:neo4j $HOME/neo4j/conf

Neo4j Docker 容器中的进程默认以 neo4j 用户身份运行。

docker run --rm \
    --volume=$HOME/neo4j/conf:/conf \
    neo4j:2026.03.1 dump-config

自定义 Neo4j Docker 镜像

要自定义 Neo4j Docker 镜像,您可以基于 Neo4j 镜像创建一个自定义 Dockerfile(使用 FROM 指令),构建该镜像,然后运行基于该镜像的容器。

建议指定明确的 Neo4j Docker 基础镜像版本。有关可用的 Neo4j Docker 镜像,请参阅 https://hub.docker.com/_/neo4j

此外,您可以将 EXTENSION_SCRIPT 作为环境变量传递,指向您需要挂载的文件夹中的位置。您可以使用此脚本执行环境的额外初始化或配置,例如加载凭据或动态设置 neo4j.conf 设置等。Neo4j 镜像的 entrypoint 脚本会检查 EXTENSION_SCRIPT 环境变量是否存在。如果已设置,它将首先执行 entrypoint 代码,然后执行指定的扩展脚本,最后启动 Neo4j。

以下是如何基于 Neo4j 镜像创建自定义 Dockerfile、构建镜像并运行基于该镜像的容器的示例。它还展示了如何使用 EXTENSION_SCRIPT 功能。

# Create a custom Dockerfile based on a Neo4j image:

/example/Dockerfile

FROM neo4j:2026.03.1-enterprise
COPY extension_script.sh /extension_script.sh
ENV EXTENSION_SCRIPT=/extension_script.sh

/example/extension_script.sh

echo "extension logic"

# Build the custom image:

docker build --file /example/Dockerfile --tag neo4j:2026.03.1-enterprise-custom-container-1 /example

# Create and run a container based on the custom image:

docker run --interactive --tty --name custom-container-1 -p7687:7687 -p7474:7474 -p7473:7473 --env NEO4J_AUTH=neo4j/your_password --env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes neo4j:2026.03.1-enterprise-custom-container-1

构建高效 Docker 镜像的推荐最佳实践和方法可以在 Docker 文档 → 编写 Dockerfile 的最佳实践中找到。