运行以下 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