使用docker-compose在Docker镜像内克隆Bitbucket私有仓库失败
解决Docker构建时克隆Bitbucket私有仓库的Host Key验证失败问题
问题分析
你遇到的Host key verification failed错误,核心原因是构建镜像时:
- SSH的
known_hosts文件权限或内容不正确 - Git未使用指定的自定义SSH密钥(你的密钥为
id-docker-unity,而非默认的id_rsa) - 部分SSH配置操作以root用户执行,导致普通用户
bobsaccamano无法正确读取相关文件
解决方案
1. 修正SSH配置,指定自定义密钥
在Dockerfile的Setup SSH keys部分,替换为以下代码,确保所有SSH操作的权限和配置正确:
# Setup SSH keys RUN mkdir -p -m 0700 /home/bobsaccamano/.ssh COPY id-docker-unity /home/bobsaccamano/.ssh/ RUN chown bobsaccamano:bobsaccamano /home/bobsaccamano/.ssh/id-docker-unity RUN chmod 600 /home/bobsaccamano/.ssh/id-docker-unity COPY id-docker-unity.pub /home/bobsaccamano/.ssh/ RUN chown bobsaccamano:bobsaccamano /home/bobsaccamano/.ssh/id-docker-unity.pub RUN touch /home/bobsaccamano/.ssh/known_hosts && chown bobsaccamano:bobsaccamano /home/bobsaccamano/.ssh/known_hosts # 以bobsaccamano用户执行ssh-keyscan,避免权限问题 RUN su - bobsaccamano -c 'ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts' # 添加SSH配置文件,指定Bitbucket连接用的密钥 RUN echo "Host bitbucket.org\n IdentityFile /home/bobsaccamano/.ssh/id-docker-unity\n User git" > /home/bobsaccamano/.ssh/config RUN chown bobsaccamano:bobsaccamano /home/bobsaccamano/.ssh/config RUN chmod 600 /home/bobsaccamano/.ssh/config
2. 提前测试SSH连接(可选但推荐)
在执行git clone前添加测试命令,验证SSH连接是否正常,方便快速排查问题:
# 测试Bitbucket SSH连接 RUN ssh -T git@bitbucket.org # Pull Repositories WORKDIR /home/bobsaccamano/proj/ RUN git clone git@bitbucket.org:some_repo/imp_hmi.git
3. 确保SSH文件权限严格合规
SSH对文件权限要求极高,必须满足:
.ssh目录权限为0700- 密钥文件(
id-docker-unity)权限为0600 config和known_hosts文件权限为0600- 所有文件的所有者必须是
bobsaccamano
关键修正点说明
- 用
su - bobsaccamano -c执行ssh-keyscan:避免root用户写入known_hosts后,普通用户无法读取的权限冲突 - 添加SSH
config文件:明确告诉Git连接Bitbucket时使用你的自定义密钥,而非默认的id_rsa - 严格控制权限:SSH会直接拒绝读取权限过于开放的密钥或配置文件
内容的提问来源于stack exchange,提问作者bobsaccamano
相关产品推荐
相关产品推荐

