GitHub Action中Docker构建与推送权限问题求助
1. ./mvnw权限拒绝问题
问题现象
本地Docker构建正常,但GitHub Action中执行Docker构建时,出现/bin/sh: ./mvnw: Permission denied错误。
原因分析
Git默认不会保留文件的执行权限,当通过actions/checkout拉取代码时,mvnw的可执行权限丢失,导致Docker构建过程中无法运行该脚本。
解决方法
有两种可行方案:
方案一:修复Git仓库中mvnw的权限
在本地项目目录执行以下命令,将mvnw的执行权限提交到Git仓库:chmod +x mvnw git add mvnw git commit -m "Add execute permission to mvnw" git push之后GitHub Action拉取的代码会包含正确的执行权限,无需修改Dockerfile。
方案二:在Dockerfile中强制添加权限
确保在COPYmvnw后立即执行chmod命令(你的Dockerfile已包含此步骤,但如果Git权限丢失,此步骤仍能生效):COPY mvnw pom.xml ./ RUN chmod +x ./mvnw RUN ./mvnw dependency:go-offline
2. Docker Hub镜像推送权限被拒问题
问题现象
Docker构建成功,但推送镜像至Docker Hub时提示denied: requested access to the resource is denied,已配置Docker Hub密钥但问题依旧。
原因分析
- 镜像标签中的用户名与Docker Hub登录用户名不一致;
- Docker Hub访问令牌/密码配置错误;
- 目标Docker Hub仓库不存在或当前用户无推送权限。
解决方法
修正镜像标签
在docker/build-push-action步骤中,将硬编码的user/app:latest替换为与Docker Hub用户名一致的标签,例如使用配置的secrets变量:- name: Build and push uses: docker/build-push-action@v3 with: push: true tags: ${{ secrets.DOCKERHUB_USERNAME }}/app:latest, ${{ secrets.DOCKERHUB_USERNAME }}/app:${{ env.TAG }}确保标签前缀是你的Docker Hub用户名,否则会因仓库归属问题被拒绝。
验证Docker Hub密钥配置
- 确认GitHub仓库的
Secrets and variables中,DOCKERHUB_USERNAME是你的Docker Hub账号名; DOCKERHUB_PASSWORD建议使用Docker Hub的访问令牌(而非账号密码),访问令牌需在Docker Hub账号设置中生成,并赋予仓库推送权限;- 检查密钥是否拼写正确,无多余空格或特殊字符。
- 确认GitHub仓库的
确认Docker Hub仓库存在
登录Docker Hub,确认${{ secrets.DOCKERHUB_USERNAME }}/app仓库已创建,若未创建需手动创建公开或私有仓库。
内容的提问来源于stack exchange,提问作者Masi Boo

