Docker

chmod:更改“myscript.sh”的權限:不允許操作

  • December 8, 2019

執行以下 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 的情況下執行它?

在建構映像之前設置權限

chmod +x scripts/myScript.sh
docker build .

docker 將在復製文件時保留權限。

在 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"]

注意我也從 ADD 切換到了 COPY,因為您沒有提取遠端 URL 或提取 tar/zip 文件。*複製目錄時也隱含了。對於單個腳本,您不需要-R遞歸選項,並且我對權限很明確,因為 shell 腳本還需要所有使用者的讀取權限。

如果您希望腳本由 sonarqube 所有,您可以執行:

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

這應該允許使用者在不進行USER更改的情況下更改腳本的權限,但可能會給該使用者更多的訪問權限,而不是您希望修改容器內的腳本。

引用自:https://serverfault.com/questions/967580