jib-maven-plugin - 如何设置文件夹权限

问题描述

我正在尝试使用 jib-maven-plugin 构建 docker 镜像,我想为特定文件夹设置权限。 如果我使用 docker 文件,配置将如下所示:

FROM xxxxxxxx.com/sandBox/gui-server:1.0.0-SNAPSHOT
USER root
RUN chmod 755 /home/www
USER www

现在我如何使用 jib-maven-plugin 实现这个?我相信在 jib-maven-plugin

中的 pom.xml 中的某处
<container>
   <mainClass>${mainClass}</mainClass>
      ...
        ...
      <user>www</user>
</container>

解决方法

您需要考虑的第一个问题是为什么您必须将基本图像目录(在您的情况下为 /home/www)的权限更改为 755。可能是因为基本图像专门设计用于由于某种我不知道的原因,以 root/home/www 运行,并且 root 应该只能由 RUN 读取。或者,如果非 root 用户无法读取该目录是没有意义的,则可能是应该在基本映像中修复的错误。

如果您仍然想更改基础映像的任意目录的权限,我可以将<extraDirectories> feature 的滥用视为演示here。但是,我有点不愿意建议将此 hack 作为一种好的解决方法。在许多情况下(尽管不是您的),问题的根源可能与权限无关,而是与文件/目录所有权有关,或者与修复应用程序以不改变基础映像中的文件有关。如果文件/目录不是来自基础映像,而是来自 Jib 放置的文件/目录,那么 Jib 所有权扩展 (Maven / Gradle) 可能会解决一些看似权限相关的问题。>

另请查看this Stack Overflow question


对于那些想知道 Jib 中是否有类似 Dockerfile 的支持(即,实际上使用某个容器运行时在容器内执行命令)的可能性的人,我将引用 these {{3} }:

Jib 构建镜像的方式与 Docker CLI 使用 ONBUILD 构建镜像的方式有着根本的不同(可再现与不可再现、声明性与命令式、Docker 和 Dockerfile-less 构建与需要 Docker 守护进程和客户端,需要 root 权限与不需要)。 Jib 处于一个非常不同的领域,因此很遗憾,除非我们彻底改变我们对如何构建图像的固执理念,否则很难支持 Dockerfile。基本上,我们不会“运行”RUN 指令,尤其是像 SELECT count(id) FROM user WHERE code= 67 AND user.postal_code like UPPER('%AL%') 这样执行某些操作的指令。 Jib 不提供/包含 Docker 运行时(这是 Jib 的要点之一)。

至于运行任意命令,不幸的是,这与 Jib 运行的模式在很大程度上不兼容,因为 Jib 构建镜像的方式与 Docker 的方式根本不同:comments 我们以声明性和可复制的方式构建镜像无需实际需要运行时组件才能在映像构建时运行映像的方式;运行图像基本上会破坏可重复性。所以不幸的是,Jib 很难在镜像构建时支持“运行”任意命令。