Docker构建执行git clone报Host key verification failure问题问询
问题原因
- 域名匹配错误:Dockerfile中
ssh-keyscan命令仅收集了公开GitLab服务gitlab.com的主机密钥,你实际拉取代码的地址对应私有GitLab域名gitlab.generalbioinformatics.com的主机密钥并未写入构建环境的known_hosts文件,SSH连接时校验不通过直接触发报错。 - 交互逻辑差异:Docker镜像构建过程为非交互式执行,遇到SSH主机密钥确认的交互提示会直接拒绝连接;容器启动后手动执行
git clone时,SSH会弹出确认提示,你输入yes后会自动将对应主机密钥写入known_hosts,因此可以正常执行。 - (潜在原因)SSH私钥权限不符合要求:通过
ADD指令传入的私钥文件默认权限可能为755,SSH安全规则要求私钥权限必须为600,权限过高会导致SSH拒绝读取私钥,也可能触发同类报错。
解决方案
按如下步骤修正Dockerfile配置即可解决问题:
- 替换
ssh-keyscan的扫描目标为你实际使用的私有GitLab域名 - 新增私钥权限修正指令,将私钥权限设置为符合SSH要求的600
- 安装依赖前建议先执行
apt-get update避免安装包索引过期
修正后的完整Dockerfile参考:
RUN apt-get update && apt-get install -y git RUN mkdir -p /root/.ssh/ ADD id_rsa /root/.ssh/id_rsa RUN chmod 600 /root/.ssh/id_rsa RUN touch /root/.ssh/known_hosts RUN ssh-keyscan gitlab.generalbioinformatics.com >> /root/.ssh/known_hosts RUN git clone git@gitlab.generalbioinformatics.com:gb-devops/dominion.git CMD sleep 1000
注意:将SSH私钥直接打包进Docker镜像存在极高的泄露风险,任何能获取到镜像的人员都可以导出私钥访问你的私有代码仓库,生产环境建议使用Docker BuildKit的Secret功能传递构建密钥,避免密钥残留在镜像层中。
内容的提问来源于stack exchange,提问作者Happy Machine
相关产品推荐
相关产品推荐

