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

Windows Docker构建镜像时SSH代理密钥无法转发至容器求助

解决Windows Docker(WSL2后端)构建时SSH密钥转发失败问题

针对你遇到的git@github.com: Permission denied (publickey)错误,以下是具体排查和解决步骤:

1. 打通WSL2与Windows SSH代理的连接

由于Docker使用WSL2后端,而Git Bash(Windows)中启动的ssh-agent无法直接被WSL2环境识别,需手动映射代理套接字:

  • 在Git Bash中执行echo $SSH_AUTH_SOCK,得到类似/tmp/ssh-XXXXXX/agent.1234的路径,对应Windows实际路径为C:\Users\你的用户名\AppData\Local\Temp\ssh-XXXXXX\agent.1234
  • 打开WSL2终端,执行以下命令替换路径:
mkdir -p ~/.ssh
ln -sf "/mnt/c/Users/你的用户名/AppData/Local/Temp/ssh-XXXXXX/agent.1234" ~/.ssh/agent.sock
export SSH_AUTH_SOCK=~/.ssh/agent.sock
  • 若要永久生效,可将上述export命令添加到WSL2的~/.bashrc文件中。

2. 修正Dockerfile的权限与命令问题

  • 你的pip install命令中--target参数缺少目标路径,需补充完整,否则会触发语法错误;
  • 容器内挂载的SSH套接字可能存在权限问题,需调整权限确保root用户可访问:
    修改后的Dockerfile核心内容:
FROM python:3.8.13 as builder
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
RUN mkdir -p /home/app/
COPY requirements.txt /requirements.txt
# 调整SSH套接字权限
RUN chmod 777 /run/ssh-agent.sock || true
# 补充--target的目标路径
RUN --mount=type=ssh pip install -r /requirements.txt --target /home/app

3. 验证Docker WSL2集成配置

  • 打开Docker Desktop设置,进入Resources > WSL Integration;
  • 勾选你正在使用的WSL2发行版(如Ubuntu),点击Apply & Restart完成配置。

4. 重新执行构建并验证密钥

在Git Bash中重新执行以下步骤:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
# 验证密钥是否成功添加
ssh-add -l
# 执行构建
docker build --ssh default .

5. 备选方案:直接在WSL2环境中构建

若跨环境代理转发仍有问题,可直接在WSL2终端内操作:

  • 将Windows下的~/.ssh/id_rsa复制到WSL2的~/.ssh/目录,或在WSL2中重新生成SSH密钥并添加到GitHub;
  • 在WSL2终端内执行eval "$(ssh-agent -s)"、ssh-add ~/.ssh/id_rsa,再执行docker build --ssh default .。

6. 检查私有仓库依赖格式

确保requirements.txt中私有仓库的URL为SSH格式:

git+ssh://git@github.com/你的用户名/私有仓库.git@指定分支#egg=包名称

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:05:26