Github Action构建推送Docker镜像失败:权限错误排查求助
问题分析与解决方案
关于SHA参数显示为空的疑问
日志中$***SHA***是Github的脱敏处理机制,并非参数实际为空。若要确认SHA是否正确传递,可在Dockerfile中添加验证步骤:
RUN echo "当前SHA值: ${SHA}"
构建时日志会显示实际SHA值,排除参数传递问题。
核心问题:myuser权限无法访问SSH Agent
以非root用户myuser运行构建时,SSH Agent的socket文件权限默认属于root,导致myuser无法读取,这是权限被拒的主要原因。以下是几种解决方式:
方式1:在Dockerfile中提前配置SSH权限
先以root身份处理SSH相关权限,再切换到myuser:
ARG TAG FROM crappdev.azurecr.io/mycompany/mybase:${TAG} USER root # 创建myuser的ssh目录并添加github主机密钥 RUN mkdir -p /home/myuser/.ssh \ && ssh-keyscan github.com >> /home/myuser/.ssh/known_hosts \ && chown -R myuser:myuser /home/myuser/.ssh USER myuser WORKDIR /home/myuser # 挂载SSH时指定myuser的uid/gid,确保可访问socket RUN --mount=type=ssh,id=default,uid=$(id -u myuser),gid=$(id -g myuser) \ cd /opt/envs/myvenv/ && \ pip install git+ssh://git@github.com/mycompany/myrepo.git@${SHA}
方式2:在Github Action中指定SSH挂载的权限
修改docker/build-push-action的ssh参数,直接指定myuser的uid和gid(需替换为实际数值,可通过id -u myuser在基础镜像中查询):
- name: "Build and push image" uses: docker/build-push-action@v4 with: file: ./Dockerfile push: true tags: crappdev.azurecr.io/mycompany/myimage:0.0.${{ github.run_number }},crappdev.azurecr.io/mycompany/myimage:latest build-args: | TAG=${{ vars.TAG }} SHA=${{ vars.SHA }} ssh: | default=${{ env.SSH_AUTH_SOCK }},uid=1000,gid=1000
额外验证步骤
- 确认SSH密钥已加载到Agent:在
Prepare Key步骤后添加验证命令
- name: Verify SSH Key run: ssh-add -l
若输出密钥指纹,说明密钥已成功加载。
- 检查虚拟环境权限:确保
/opt/envs/myvenv/目录属于myuser,否则需在Dockerfile中添加RUN chown -R myuser:myuser /opt/envs/myvenv/(以root身份执行)。
内容的提问来源于stack exchange,提问作者Aron T
相关产品推荐
相关产品推荐

