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

使用SSH Git仓库地址执行docker build报Permission denied错误如何解决

问题解答

特性支持情况

docker build 完全支持直接使用SSH格式的私有Git仓库地址作为构建上下文,该特性依赖BuildKit构建引擎,你当前使用的Docker Desktop 20.10.8版本默认已启用BuildKit,环境本身满足特性运行要求。

报错原因说明

你使用的--ssh=default参数仅作用于构建过程中RUN指令的SSH密钥转发,不作用于拉取Git构建上下文的前置阶段。拉取远程Git仓库的操作由BuildKit内置的Git客户端执行,默认不会读取你本地~/.ssh目录下的密钥文件,因此会返回公钥认证失败的错误。

正确配置方法

方案1:本地SSH代理转发(推荐开发场景使用)

该方案无需直接传递私钥文件,依赖本地SSH agent完成认证:

  • 首先将本地SSH私钥添加到SSH agent:
    # macOS 环境执行,-K参数可将私钥密码存入系统钥匙串,避免重复输入
    ssh-add -K ~/.ssh/id_rsa
    # Linux 环境执行
    ssh-add ~/.ssh/id_rsa
    
  • 调整构建命令即可正常拉取私有仓库构建:
    docker build -t registry.example.com:5000/my-repo:latest git@github.com:my-org/my-repo.git#main --ssh default
    
    地址末尾的#main为指定要拉取的分支,可替换为对应标签、Commit哈希,若拉取默认分支可以省略。

方案2:直接指定私钥路径(推荐CI/CD场景使用)

自动化构建场景无SSH agent可用时,可直接指定私钥路径传递给BuildKit:

docker build -t registry.example.com:5000/my-repo:latest git@github.com:my-org/my-repo.git#main --ssh default=$HOME/.ssh/id_rsa

注意事项

  • 你测试的最后一种URL格式git@github.com:my-org/my-repo.git为正确的SCP格式SSH仓库地址,无需调整格式
  • 使用--ssh参数的密钥转发机制不会将私钥写入镜像层,安全性符合生产使用要求
  • 若需要拉取仓库子目录作为构建上下文,可在地址后加#分支名:目录路径,例如git@github.com:my-org/my-repo.git#main:src

内容的提问来源于stack exchange,提问作者Nico J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:48:04