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

Docker无法克隆私有Git仓库问题求助

解决Docker构建中SSH密钥克隆私有Git仓库的权限问题

看起来你在Docker镜像构建过程中,遇到了用SSH密钥访问私有Git仓库的认证问题,我来帮你一步步排查解决:

先排查密钥传递的核心问题

你通过ARG传递SECRET_KEY和PUB_KEY,这里要特别注意:SSH私钥是包含换行符的多格式文本,如果传递时没保留换行,写入到id_rsa的内容就是损坏的——这会导致哪怕密钥本身没加密,ssh-add也会错误地要求输入密码。

建议你在构建镜像时,直接通过本地文件读取密钥内容传递,避免手动复制粘贴丢失格式:

docker build --build-arg SECRET_KEY="$(cat ./path/to/your/id_rsa)" --build-arg PUB_KEY="$(cat ./path/to/your/id_rsa.pub)" .

正确在Dockerfile中使用ssh-agent

每个RUN指令都是独立的shell进程,所以必须把启动ssh-agent、添加密钥、执行克隆脚本的命令放在同一个RUN块里,否则agent会在当前RUN执行结束后直接终止,后续命令找不到agent进程。另外你之前的eval ssh-agent s``是拼写错误,正确写法是eval $(ssh-agent -s)。

修改后的完整关键代码块如下:

RUN mkdir -p /root/.ssh && \
    echo "${SECRET_KEY}" > /root/.ssh/id_rsa && \
    echo "${PUB_KEY}" > /root/.ssh/authorized_keys && \
    ssh-keyscan git.ng.bluemix.net >> /root/.ssh/known_hosts && \
    # 严格设置SSH目录和文件的权限(SSH对权限要求很严)
    chmod 755 /root/.ssh && \
    chmod 600 /root/.ssh/id_rsa && \
    chmod 600 /root/.ssh/authorized_keys && \
    chmod 644 /root/.ssh/known_hosts && \
    echo "IdentityFile ~/.ssh/id_rsa" >> /etc/ssh/ssh_config && \
    # 同一进程内启动agent、添加密钥、执行构建脚本
    eval $(ssh-agent -s) && \
    ssh-add /root/.ssh/id_rsa && \
    bash ./build.sh

额外的排查与优化建议

  • 如果你不需要authorized_keys(毕竟是容器主动拉取仓库,不是外部连接容器),可以删掉这部分配置,减少不必要的步骤。
  • 可以在ssh-add前后添加ssh-add -l命令,验证密钥是否被正确识别,方便快速排查问题:
    eval $(ssh-agent -s) && \
    ssh-add -l && \  # 查看当前agent中的密钥(应该为空)
    ssh-add /root/.ssh/id_rsa && \
    ssh-add -l && \  # 确认密钥已被添加
    bash ./build.sh
    
  • 不要在Dockerfile中给ARG设置默认值(比如ARG SECRET_KEY="***"),避免敏感信息被意外提交到代码仓库。

解释之前的"Could not open a connection to your authentication agent"错误

因为你在单独的RUN里启动了ssh-agent,但下一个RUN是全新的进程,agent的环境变量(比如SSH_AUTH_SOCK)没有被传递,导致ssh-add找不到agent的socket连接。把所有相关命令合并到同一个RUN里,就能保证它们在同一个进程环境中执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:47:48