Docker WSL2环境下BuildKit ssh挂载异常 克隆Git仓库提示无匹配加密算法
问题根因
- BuildKit的type=ssh挂载仅会转发宿主机的SSH代理套接字,不会同步宿主机的SSH配置文件:你在宿主机
~/.ssh/config中定义的Ciphers +aes256-cbc规则不会被带入构建容器,容器内默认的SSH客户端未启用aes256-cbc算法,因此触发加密算法协商失败的报错。 - 配置与实际访问地址不匹配:你Dockerfile中克隆仓库使用的域名是
gitlab.seventest,但宿主机SSH配置的Host规则仅针对自定义别名<host>生效,哪怕配置被同步也不会作用于实际的克隆请求;ssh-keyscan执行后known_hosts为空,大概率是你没有将代码中的<host>占位符替换为实际可解析的域名/IP,或者构建容器内无法解析该地址。
修复方案
- 在Dockerfile内显式配置容器内的SSH规则,不需要依赖宿主机配置:
FROM debian:10 RUN apt update && apt -y install git && mkdir -m 700 /root/.ssh RUN --mount=type=ssh \ # 写入Git服务对应的SSH配置,启用要求的加密算法 echo -e "Host gitlab.seventest\n Port 22022\n User git\n PubkeyAuthentication yes\n Ciphers +aes256-cbc" > /root/.ssh/config && \ chmod 600 /root/.ssh/config && \ # 直接使用实际克隆的域名生成known_hosts记录 ssh-keyscan -t rsa -p 22022 gitlab.seventest >> /root/.ssh/known_hosts && \ ssh-keyscan -t rsa -p 22022 "$(getent hosts gitlab.seventest | awk '{ print $1 }')" >> /root/.ssh/known_hosts && \ git clone ssh://git@gitlab.seventest:22022/some/project.git /root/project
- 执行构建命令时显式指定SSH代理转发参数:
DOCKER_BUILDKIT=1 docker build --ssh default .
- WSL2环境前置校验:
构建前确认SSH代理中已加载对应密钥:
ssh-add -l # 若无密钥输出,重新执行加载操作 eval `ssh-agent -s` && ssh-add ~/.ssh/id_rsa
内容的提问来源于stack exchange,提问作者genesi5
相关产品推荐
相关产品推荐

