chmod:更改“myscript.sh”的权限:操作不允许

chmod:更改“myscript.sh”的权限:操作不允许

运行以下 docker 文件时出现"chmod: changing permissions of '/scripts/entrypoint.sh': Operation not permitted"错误。

FROM sonarqube:7.7-community
ADD plugins/* /plugins/
ADD scripts/* /scripts/
ADD conf/* /conf/
ADD bin/* /bin/
RUN chmod -R a+X /scripts/myScript.sh
ENTRYPOINT ["/scripts/myScript.sh"]

但当我添加USER root它时,它就可以工作了。但我不想用 root 运行它。有什么方法可以不用 root 运行它吗?

答案1

在构建映像之前设置权限

chmod +x scripts/myScript.sh
docker build .

docker 在复制文件时会保留权限。

答案2

在 Linux 中更改不属于您的文件的权限需要 root 访问权限,而 COPY 命令很可能是以 root 身份复制文件。修复权限后,您可以改回 sonarqube 用户。以下是 Dockerfile 示例:

FROM sonarqube:7.7-community
COPY plugins/ /plugins/
COPY scripts/ /scripts/
COPY conf/ /conf/
COPY bin/ /bin/
USER root
RUN chmod 755 /scripts/myScript.sh
USER sonarqube
ENTRYPOINT ["/scripts/myScript.sh"]

注意,由于您没有提取远程 URL 或提取 tar/zip 文件,因此我还从 ADD 切换到 COPY。*复制目录时也隐含了这一点。对于单个脚本,您不需要-R递归选项,并且我明确说明了权限,因为 shell 脚本也需要所有用户的读取访问权限。

如果您希望脚本归 sonarqube 所有,您可以运行:

COPY --chown=sonarqube:sonarqube scripts/ /scripts/

这应该允许用户在不进行USER更改的情况下更改脚本的权限,但可能会赋予该用户比您希望修改容器内脚本的更多的访问权限。

答案3

复制时您可以使用以下内容:

COPY --chmod=755 myScript.sh /detination/folder

答案4

使用 sudo chmod 而不是仅仅使用 chmod

相关内容