You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab Runner中Docker执行gradlew时权限拒绝问题排查

Docker构建在GitLab Runner上出现gradlew权限拒绝问题

问题详情

本地执行Docker构建时一切正常,但在GitLab Runner上执行相同脚本,RUN ./gradlew -b /code/build.gradle buildNative步骤抛出权限拒绝错误:

/bin/sh: ./gradlew: Permission denied
The command '/bin/sh -c ./gradlew -b /code/build.gradle buildNative' returned a non-zero code: 126

使用的Dockerfile如下:

FROM quay.io/quarkus/ubi-quarkus-native-image:21.3.1-java11 AS build
COPY --chown=quarkus:quarkus gradlew /code/gradlew
COPY --chown=quarkus:quarkus gradle /code/gradle
COPY --chown=quarkus:quarkus build.gradle /code/
COPY --chown=quarkus:quarkus settings.gradle /code/
COPY --chown=quarkus:quarkus gradle.properties /code/
USER quarkus
WORKDIR /code
COPY src /code/src
RUN ./gradlew -b /code/build.gradle buildNative

解决方案

1. 直接在COPY时设置可执行权限

如果Docker版本支持(17.09+),可以在COPY指令中直接添加--chmod参数,确保gradlew复制到容器后具备可执行权限:

FROM quay.io/quarkus/ubi-quarkus-native-image:21.3.1-java11 AS build
COPY --chown=quarkus:quarkus --chmod=755 gradlew /code/gradlew
COPY --chown=quarkus:quarkus gradle /code/gradle
COPY --chown=quarkus:quarkus build.gradle /code/
COPY --chown=quarkus:quarkus settings.gradle /code/
COPY --chown=quarkus:quarkus gradle.properties /code/
USER quarkus
WORKDIR /code
COPY src /code/src
RUN ./gradlew -b /code/build.gradle buildNative

2. 单独添加权限赋予步骤

若Docker版本不支持--chmod,可在复制gradlew后,通过RUN指令手动添加可执行权限:

FROM quay.io/quarkus/ubi-quarkus-native-image:21.3.1-java11 AS build
COPY --chown=quarkus:quarkus gradlew /code/gradlew
RUN chmod +x /code/gradlew
COPY --chown=quarkus:quarkus gradle /code/gradle
COPY --chown=quarkus:quarkus build.gradle /code/
COPY --chown=quarkus:quarkus settings.gradle /code/
COPY --chown=quarkus:quarkus gradle.properties /code/
USER quarkus
WORKDIR /code
COPY src /code/src
RUN ./gradlew -b /code/build.gradle buildNative

3. 先以root用户处理权限再切换用户

避免--chown指令干扰权限继承,先以root用户复制文件、设置权限,再切换到quarkus用户:

FROM quay.io/quarkus/ubi-quarkus-native-image:21.3.1-java11 AS build
COPY gradlew /code/gradlew
COPY gradle /code/gradle
COPY build.gradle /code/
COPY settings.gradle /code/
COPY gradle.properties /code/
# 设置权限并修改所有者
RUN chmod +x /code/gradlew && chown -R quarkus:quarkus /code
USER quarkus
WORKDIR /code
COPY src /code/src
RUN ./gradlew -b /code/build.gradle buildNative

4. 确保Git仓库中gradlew的权限正确

本地项目中先给gradlew添加可执行权限,再推送到GitLab,确保Runner拉取代码后文件权限保留:

chmod +x gradlew
git add gradlew
git commit -m "Fix gradlew executable permission"
git push

内容的提问来源于stack exchange,提问作者SirHawrk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:15:39