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

Dockerfile中用SSH Key克隆GitLab私有仓库遇公钥权限拒绝错误

解决Docker BuildKit构建时GitLab私有仓库克隆权限拒绝问题

以下是针对你遇到的git@gitlab.com: Permission denied (publickey)问题的排查和解决步骤:

  • 确认SSH代理状态与密钥加载
    本地终端能正常访问GitLab不代表BuildKit能自动获取到代理中的密钥。先检查密钥是否已添加到SSH代理:

    ssh-add -l
    

    如果没有输出对应密钥,手动添加私钥:

    ssh-add ~/.ssh/id_rsa  # 替换为你的私钥文件名
    

    若系统的SSH代理套接字路径特殊,构建时显式指定代理路径:

    DOCKER_BUILDKIT=1 docker build --ssh default=$SSH_AUTH_SOCK --tag test:local .
    
  • 检查Dockerfile的用户上下文
    如果你在Dockerfile中切换了非root用户(比如RUN useradd -m app && USER app),挂载的SSH资源默认属于root用户,导致切换后的用户无法访问。需要在--mount参数中指定用户UID:

    # 先通过本地命令`id -u app`获取目标用户UID(假设用户名是app)
    RUN --mount=type=ssh,uid=1000 git clone git@gitlab.com:*name_of_repo* *download_location*
    
  • 修复known_hosts配置
    ssh-keyscan可能因网络或GitLab密钥更新问题,未能生成正确的known_hosts条目。直接复制本地已验证的GitLab密钥到Dockerfile:

    RUN mkdir -p -m 0700 ~/.ssh && echo "gitlab.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsj2bNKTBSpIYDEGk9KxsGh3mySTRgMtXL583qmBpzeQ+jqCMRgBqB98u3z++J1sKlXHWfM9dyhSevkMwSbhoR8XIq/U0tCNyokEi/ueaBMCvbcTHhO7FcwzY92WK4Yt0aGROY5qX2UKSeOvuP4D6TPqKF1onrSzH9bx9XUf2lEdWT/ia1NEKjunUqu1xOB/StKDHMoX4/OKyIzuS0q/T1zOATthvasJFoPrAjkohTyaDUz2LN5JoH839hViyEG82yB+MjcFV5MU3N1l1QL3cVUCh93xSaua1N85qivl+siMkPGbO5xR/En4iEY6K2XPASUEMaieWVNTRCtJ4S8H+9" >> ~/.ssh/known_hosts
    
  • 验证Docker对SSH代理的访问权限
    检查SSH代理套接字的权限,确保Docker进程能读取:

    ls -l $SSH_AUTH_SOCK
    

    若权限不足,临时调整套接字权限(注意安全风险,仅用于排查):

    chmod 666 $SSH_AUTH_SOCK
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:42:24