docker - 如何更改 Dockerfile 中文件的权限?

标签 docker sonarqube dockerfile

我有以下 Dockerfile:

FROM sonarqube

ADD https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/4.0.0/sonar-gitlab-plugin-4.0.0.jar /opt/sonarqube/extensions/plugins/
RUN chmod +r /opt/sonarqube/extensions/plugins/ && chown -R sonarqube.sonarqube /opt/sonarqube/extensions/plugins/

我收到以下错误:

Step 3/3 : RUN chmod +x /opt/sonarqube/extensions/plugins/ && chown -R sonarqube.sonarqube /opt/sonarqube/extensions/plugins/
 ---> Running in 0fd0abc88b73
chown: changing ownership of '/opt/sonarqube/extensions/plugins/sonar-gitlab-plugin-4.0.0.jar': Operation not permitted
The command '/bin/sh -c chmod +x /opt/sonarqube/extensions/plugins/ && chown -R sonarqube.sonarqube /opt/sonarqube/extensions/plugins/' returned a non-zero code: 1

如果我这样做:

FROM sonarqube


ADD https://github.com/gabrie-allaigre/sonar-gitlab-plugin/releases/download/4.0.0/sonar-gitlab-plugin-4.0.0.jar /opt/sonarqube/extensions/plugins/
RUN sudo chmod +r /opt/sonarqube/extensions/plugins/ && sudo chown -R sonarqube.sonarqube /opt/sonarqube/extensions/plugins/

我收到以下错误:

Step 3/3 : RUN sudo chmod +x /opt/sonarqube/extensions/plugins/ && sudo chown -R sonarqube.sonarqube /opt/sonarqube/extensions/plugins/
 ---> Running in c7dc030ea2ac
/bin/sh: 1: sudo: not found
The command '/bin/sh -c sudo chmod +x /opt/sonarqube/extensions/plugins/ && sudo chown -R sonarqube.sonarqube /opt/sonarqube/extensions/plugins/' returned a non-zero code: 127

如何在 Dockerfile 中更改文件的权限?

最佳答案

chmod +r/opt/sonarqube/extensions/plugins/ 会抛出错误,因为 sonarqube 容器是以用户 sonarqube 运行的(参见 USER sonarqube Dockerfile 中的命令:https://github.com/SonarSource/docker-sonarqube/blob/master/7.7-community/Dockerfile )

sudo 未安装在镜像中,因此您将无法使用 sudo 运行命令。相反,正如 M. Alekseev 提到的,将用户更改为 root 并运行您的自定义命令。

USER root
RUN ...
RUN ...

# switch back to user sonarqube for security
USER sonarqube

我建议在安装自定义包等后切换回用户 sonarqube

请注意,您可能需要为 root 用户创建的文件设置权限。

关于docker - 如何更改 Dockerfile 中文件的权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56040125/

相关文章:

docker - 将 $SOURCE_COMMIT 传递给 docker hub 上的 Dockerfile 命令

java - SonarQube:不应直接存储或返回可变成员

java - 是否可以像在 gradle 中设置 sonar.sources 一样在 jenkins 中设置?

docker - 运行后退出容器Docker

docker - 在 mkdir 之后触摸文件时构建 Dockerfile 失败

image - docker ubuntu 容器文件系统

python-3.x - 如何从docker-py获取容器ID

sonarqube - 质量配置文件的多重继承

bash - Dockerfile 将 bash 命令分配给 var

docker - Docker 镜像上的 pip 找不到 Rust - 即使安装了 Rust