以非 Root 用户运行 Docker
当运行 Neo4j Docker 时,它将在容器内部以 neo4j
用户身份运行。但是,要以不同用户身份运行 docker,可以指定 --user
参数。文档中有一个关于以非 root 用户运行的部分
但想在这篇知识库文章中进一步阐述。
使用 --user
标志时,需要提供一个有效且非 root 的用户值。我们的 Docker 容器假定/要求用户 a) 不是 root,b) 对数据和日志目录具有写权限,并且对 conf 目录具有读权限。重要的是要注意,如果将 0:0 或 0 或 root 等作为 --user 传递,容器仍然不会使用 root 来运行 neo4j,而是会使用其内部的 neo4j 用户和 neo4j 用户组(当前他们的 uid 和 gid 恰好是 101,但不应依赖此)。Docker 的入口点专门编写用于避免以 root 身份运行 neo4j docker 镜像。
所以这里的最佳方法是创建一个用户和组,并将其传递给 Docker 输入 --user。
创建一个没有主目录的用户 neo4j
$ sudo useradd -M neo4j
阻止 neo4j 登录
$ sudo usermod -L neo4j
创建 data 目录。
$ 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
如果您对 conf 目录进行外部更改,必须重新启动 docker 镜像才能加载新的配置(conf 在启动时从挂载的卷复制)。 |
$ 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
此页面有帮助吗?