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

Docker构建中SSH连接GitHub失败,请求排查问题

Docker BuildKit构建时SSH连接GitHub失败排查方案

问题背景

  • 本地路径~/.ssh/id_ed25519_docker下有已添加到GitHub的无密码私钥,本地执行ssh -i ~/.ssh/id_ed25519_docker -vT git@github.com可正常完成认证。
  • 构建命令:export DOCKER_BUILDKIT=1; docker build --ssh default=~/.ssh/id_ed25519_docker .
  • Dockerfile最后一步执行RUN ssh -vT git@github.com失败,错误为git@github.com: Permission denied (publickey),调试日志未尝试指定私钥;修改指令为RUN ssh -i ~/.ssh/id_ed25519_docker -vT git@github.com后,出现警告Identity file /root/.ssh/id_ed25519_docker not accessible: No such file or directory。
  • Docker Client API版本:1.41

解决步骤

1. 给RUN指令添加SSH挂载参数

BuildKit不会自动将SSH私钥复制到容器内,需要通过--mount=type=ssh参数将本地SSH代理转发到构建容器中。修改Dockerfile中的RUN指令:

# 先确保基础镜像安装了openssh-client(如果基础镜像没有的话)
RUN apt-get update && apt-get install -y --no-install-recommends openssh-client && rm -rf /var/lib/apt/lists/*

# 使用--mount=type=ssh挂载SSH代理
RUN --mount=type=ssh ssh -vT git@github.com

此参数会自动关联构建命令中--ssh default=...指定的私钥,无需手动复制私钥到容器。

2. 验证容器内SSH代理状态

添加调试指令确认代理是否正常挂载:

RUN --mount=type=ssh \
    echo "SSH_AUTH_SOCK路径: $SSH_AUTH_SOCK" && \
    ssh-add -l

如果输出包含你的id_ed25519_docker私钥指纹,说明代理挂载成功。

3. 配置SSH客户端自动使用代理

创建容器内的SSH配置文件,让git@github.com请求自动走代理:

RUN mkdir -p ~/.ssh && \
    echo -e "Host github.com\n  IdentityAgent $SSH_AUTH_SOCK" > ~/.ssh/config && \
    chmod 600 ~/.ssh/config

这样后续的ssh git@github.com或Git克隆操作会自动使用代理中的私钥,无需手动指定-i参数。

4. 确认BuildKit启用状态

确保DOCKER_BUILDKIT=1环境变量生效,也可以通过修改Docker配置文件永久启用:
编辑/etc/docker/daemon.json(不存在则新建):

{
  "features": {
    "buildkit": true
  }
}

保存后重启Docker服务:

sudo systemctl restart docker

5. 检查本地私钥权限

本地私钥权限必须为600,否则BuildKit无法读取:

chmod 600 ~/.ssh/id_ed25519_docker

确保私钥为无密码类型,若有密码,需提前通过ssh-add ~/.ssh/id_ed25519_docker添加到本地SSH代理(构建时可能需要输入密码,建议使用无密码私钥)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:11:53