【问题标题】:Google jib - Change owner of all files and foldersGoogle 工作 - 更改所有文件和文件夹的所有者
【发布时间】:2021-08-30 02:51:51
【问题描述】:

所有应用文件和额外目录都归根用户所有。

/app/libs/
/app/resources/ 
/app/classes/
/app/logs

我想以非 root 用户身份运行应用程序,并且我希望这些文件/文件夹仅归该用户所有,而不是 root。

有没有办法做到这一点?我发现下面提到的 jib maven 插件可以更改所有者,但建议不要这样做。有没有更好的办法?

https://github.com/GoogleContainerTools/jib-extensions/tree/master/first-party/jib-ownership-extension-maven

【问题讨论】:

    标签: jib maven-jib


    【解决方案1】:
    推荐的答案 Google Cloud

    您想要更改应用目录某些部分的所有权的原因是您的应用想要在运行时修改某些文件或在其中创建新文件。一般来说,将图像构建为尽可能不可变被认为是一种好习惯。

    既然您提到了/app/logs,我怀疑您的应用在运行时会生成日志文件。在一些现代容器编排平台(如 Kubernetes)上,应用程序通常设计为output logs to stdout and stderr

    最佳做法是将应用程序日志写入标准输出 (stdout) 和标准错误 (stderr) 流。

    想一想:如果你的应用在一个容器内/app/logs生成日志文件(同一个镜像会有多个容器运行),你将如何统一收集和监控它们?如果不同的应用程序在不同的文件系统位置生成日志文件怎么办?但更重要的是,如果您的容器崩溃,您只会丢失日志文件。通过将日志写入 stdoutstderr,平台(例如 Kubernetes)将负责管理和关联来自所有 pod 的日志的所有复杂性。

    如果你不能改变你的应用程序的日志文件,至少你应该在运行时在/app/logs 挂载一个卷。对于任何容器运行时(无论是 k8s 还是 Docker),这都很容易配置。挂载的目录通常是全局可写的,因此您无需更改所有权。但是您仍然需要考虑如何收集和管理日志文件。

    同样,如果不是用于日志文件,而是您的应用需要文件系统在应用目录中创建临时文件,并且由于某种原因您无法更改位置,那么至少您应该先尝试挂载临时卷回到使用您提到的 Jib Ownership Extension 的最后手段。

    最后,请仔细评估您必须首先更改所有权的原因。如果应用程序想要在运行时改变自身,通常这不是容器化的好做法,并且必须有一些根本原因,您可能需要以适当的方式解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 2013-11-13
      相关资源
      最近更新 更多