以非根用户运行 Docker
运行 Neo4j Docker 时,它将在容器内以 neo4j
用户身份运行。但是,要以不同的用户身份运行 Docker,可以指定 --user
参数。文档中有一节介绍如何以非根用户身份运行
但希望在这篇知识库文章中对此进行详细说明。
使用 --user
标志时,需要提供一个有效的非根用户值。我们的 Docker 容器假定/要求用户 a) 不是 root b) 对数据和日志目录具有写入权限,并对配置目录具有读取权限。请注意,如果您将 0:0 或 0 或 root 等作为 --user 传递,它仍然不会使用 root 运行 neo4j,但容器将使用其自己的内部 neo4j 用户和 neo4j 用户组(它们恰好目前具有 uid 101 和 gid 101,但不要依赖于此)。Docker 入口点专门编写为避免以 root 身份运行 neo4j docker 镜像。
因此,这里最好的方法是创建一个用户和组,并将它们传递到 Docker 输入 --user。
创建一个没有主目录的 neo4j 用户
$ sudo useradd -M neo4j
阻止 neo4j 登录
$ sudo usermod -L neo4j
创建数据目录。
$ sudo mkdir -p /neo4j/data
$ sudo chown -R neo4j /neo4j/data
$ sudo chgrp -R neo4j /neo4j/data
注意,我们只在这里授予组读取权限
$ sudo chmod -R u+rwX,g+rX,o-wrx /neo4j/data
我们不推荐除 neo4j 以外的任何应用程序写入数据目录。这可能会损坏数据存储。
$ sudo mkdir -p /neo4j/conf
$ sudo chown -R neo4j /neo4j/conf
$ sudo chgrp -R neo4j /neo4j/conf
组在此处获得写入权限
$ sudo chmod -R u+rX,g+rwX,o-wrx /neo4j/conf
如果您对配置目录进行了外部更改,则必须重新启动 docker 镜像才能获取新的配置(配置在启动时从已挂载的卷中复制)。 |
$ sudo mkdir -p /neo4j/plugins
$ sudo chown -R neo4j /neo4j/plugins
$ sudo chgrp -R neo4j /neo4j/plugins
组在此处获得写入权限
$ sudo chmod -R u+rwX,g+rwX,o-wrx /neo4j/plugins # N.b. if you make external changes to the plugins dir you must restart neo4j before it will pickup new plugins
假设日志目录由多个应用程序使用。请注意,如果某些内容干扰了 neo4j 写入日志,则可能会使 neo4j 进程崩溃。为所有与日志相关的事项创建一个日志组
$ sudo groupadd logs
将 neo4j 添加到日志组
$ sudo usermod -a -G logs neo4j
$ sudo mkdir -p /logs/neo4j
$ sudo chown -R root /logs/neo4j
$ sudo chgrp -R logs /logs/neo4j
$ sudo chmod -R u+rwX,g+rwX,o-wrx /logs/neo4j
如果 docker 不以 root 身份运行
$ docker_user=root
$ sudo usermod -a -G logs "${docker_user}"
$ sudo usermod -a -G neo4j "${docker_user}"
将我们自己添加到 neo4j 组,以便可以读取和编辑上面创建的 /neo4j/*
目录。
$ current_user=$(id -un)
$ sudo usermod -a -G neo4j "${current_user}"
启动一个新的 shell 以获取此组分配。
注意,docker 不会自动拉取辅助组,因此必须显式地执行此操作
$ groups=( $( id --real --groups neo4j ) )
$ docker run \
--publish=7474:7474 --publish=7687:7687 \
--volume=/neo4j/data:/data \
--volume=/neo4j/plugins:/plugins \
--volume=/neo4j/conf:/conf \
--volume=/logs/neo4j:/logs \
--user="$(id -u neo4j):$(id -g neo4j)" \
--group-add=$groups \
neo4j:3.4
此页面是否有帮助?