如何更改 Dockerfile 中文件的权限?
How to change permission on file in 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 中更改文件的权限?
如果你想 运行 作为 root 用户使用命令而不是使用 sudo 使用 USER root
行切换到 root 然后执行你的命令
chmod +r /opt/sonarqube/extensions/plugins/
抛出错误,因为 sonarqube 容器是 运行 作为用户 sonarqube
(请参阅 Dockerfile 中的 USER sonarqube
命令: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 用户创建的文件设置权限。
我有以下 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 中更改文件的权限?
如果你想 运行 作为 root 用户使用命令而不是使用 sudo 使用 USER root
行切换到 root 然后执行你的命令
chmod +r /opt/sonarqube/extensions/plugins/
抛出错误,因为 sonarqube 容器是 运行 作为用户 sonarqube
(请参阅 Dockerfile 中的 USER sonarqube
命令: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 用户创建的文件设置权限。