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

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

额外验证步骤

  1. 确认SSH密钥已加载到Agent:在Prepare Key步骤后添加验证命令
- name: Verify SSH Key
  run: ssh-add -l

若输出密钥指纹,说明密钥已成功加载。

  1. 检查虚拟环境权限:确保/opt/envs/myvenv/目录属于myuser,否则需在Dockerfile中添加RUN chown -R myuser:myuser /opt/envs/myvenv/(以root身份执行)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:45:29