Docker
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 的情況下執行它?
在建構映像之前設置權限
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
更改的情況下更改腳本的權限,但可能會給該使用者更多的訪問權限,而不是您希望修改容器內的腳本。