知识库

Docker “权限被拒绝” 错误

当启动 docker 实例时,可能会出现权限被拒绝的错误,例如

2018-06-14 23:20:50.962+0000 ERROR Failed to start Neo4j: Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@7880cdf3' was successfully initialized, but failed to start. Please see the attached cause exception "/logs/debug.log (Permission denied)". Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@7880cdf3' was successfully initialized, but failed to start. Please see the attached cause exception "/logs/debug.log (Permission denied)".

并且可能无法启动。

Docker 过去以 root 用户身份运行,现在已更改。此更改在 3.1.8、3.2.9、3.3.4 docker 镜像以及 3.4 及更高版本中引入。为了使任何较新的 neo4j 继续访问这些较旧的 logsconfdata,您必须更改旧版本创建的文件的权限 - 这尤其适用于现有的日志和数据文件。

授予“所有人”对日志目录的访问权限确实可以规避“权限被拒绝”错误。但是,这不是首选解决方案。我们建议:

A) 为用户在 docker 中传递的用户授予日志目录的拥有权或主组,以及读写权限 如何将 --user 作为参数传递给 docker,请参阅以下知识库文章。 https://support.neo4j.com/hc/en-us/articles/360012923574-Running-Docker-as-Non-Root-User

或者

B) 创建一个具有日志目录访问权限的辅助组,例如 sudo groupadd logs,并将他们用于运行 neo4j 的用户添加到该组。如果这样做,则必须使用 --group-add 标志将辅助组额外传递给 docker。例如

group-add="$(getent group logs | cut -d ":" -f3)"