Windows内置OpenSSH配合Docker Desktop构建时报All pipe instances are busy错误
问题根因
你遇到的All pipe instances are busy报错是Windows自带OpenSSH 8.1~8.6版本的ssh-agent服务的已知缺陷:其命名管道实例数限制过低,老版本Docker BuildKit连接时会触发管道占用冲突。
解决方案
按优先级从高到低排序:
方案1:替换为Git for Windows自带的SSH(永久解决)
- 以管理员权限打开PowerShell,执行以下命令禁用系统自带ssh-agent:
Stop-Service ssh-agent Set-Service -StartupType Disabled ssh-agent
- 找到Git安装路径下的ssh目录,默认路径为
C:\Program Files\Git\usr\bin\,将该路径添加到系统环境变量PATH中,并且移动到C:\Windows\System32\OpenSSH\路径之前,保证优先级更高。 - 重启PowerShell,执行
ssh -V确认输出为Git附带的OpenSSH版本,说明替换生效。 - 启动Git自带的ssh-agent,添加你的私有仓库访问私钥:
# 启动代理 eval $(ssh-agent) # 添加私钥,按提示输入密码(如果有) ssh-add ~/.ssh/你的私钥文件名
- 重新执行构建命令即可:
$env:DOCKER_BUILDKIT=1 docker build --ssh default .
方案2:升级Docker Desktop(永久解决)
你当前使用的Docker 20.10.10是2021年的旧版本,20.10.16及之后的稳定版已经适配了Windows自带OpenSSH的管道实现缺陷,升级Docker Desktop到最新稳定版即可直接解决该问题,无需修改SSH配置。
方案3:临时重启ssh-agent(应急使用)
如果不想修改现有配置,每次构建前以管理员权限打开PowerShell执行:
Restart-Service ssh-agent
重启后立刻执行构建命令,即可临时规避管道忙的报错,该方法仅单次生效,下次构建需要再次重启服务。
额外注意事项
- 构建前必须先将访问GitHub的私钥添加到ssh-agent中,执行
ssh-add 私钥路径操作,否则代理中没有可用密钥依然无法拉取私有仓库。 - Dockerfile中拉取私有仓库的RUN指令需要挂载ssh代理,示例写法:
# 开启BuildKit的ssh挂载 RUN --mount=type=ssh git clone git@github.com:你的用户名/你的私有仓库.git
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

