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

Bitbucket Pipeline构建含私有仓库依赖的Docker镜像失败求助

问题解决步骤

1. 修复Dockerfile中的路径错误

你遇到的exit code: 2错误直接原因是路径拼写错误:~.ssh/id_rsa应该是~/.ssh/id_rsa(缺少点号分隔符)。修改Dockerfile中的对应行:

# 错误写法
RUN echo "${SSH_PRIVATE_KEY}" > ~.ssh/id_rsa
# 正确写法
RUN echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa

2. 优化SSH密钥写入与配置

为避免密钥换行符丢失、减少镜像层数,建议将SSH相关操作合并为一个RUN命令,并使用printf替代echo(echo会自动添加换行,可能破坏密钥格式):

ARG SSH_PRIVATE_KEY
RUN mkdir -p ~/.ssh/ \
    && printf "%s" "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa \
    && chmod 600 ~/.ssh/id_rsa \
    && ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts \
    && eval $(ssh-agent -s) && ssh-add ~/.ssh/id_rsa

3. 验证requirements.txt私有包格式

确保requirements.txt中私有Python包的格式正确,示例格式如下:

# 格式:git+ssh://git@bitbucket.org/[团队/用户名]/[仓库名].git@[分支/标签]#egg=[包名]
git+ssh://git@bitbucket.org/your-team/private-repo.git@main#egg=private-package

4. 优化Bitbucket Pipeline密钥传递

建议直接通过仓库变量传递SSH密钥,而非读取本地文件:

  1. 在Bitbucket仓库的「Settings > Repository variables」中添加SSH_PRIVATE_KEY变量,值为你的私有密钥内容(确保密钥无密码)。
  2. 修改bitbucket-pipelines.yml中的密钥导出行:
# 替换原来的读取文件行
- export SSH_PRIVATE_KEY="$SSH_PRIVATE_KEY"

5. 可选:用BuildKit Secret替代BuildArg(更安全)

为避免密钥暴露在构建历史中,推荐使用Docker BuildKit的secret挂载方式传递SSH密钥:

  • 修改Dockerfile(移除ARG SSH_PRIVATE_KEY,整合密钥配置与依赖安装):
RUN --mount=type=secret,id=ssh_key,dst=/root/.ssh/id_rsa \
    chmod 600 /root/.ssh/id_rsa \
    && ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts \
    && eval $(ssh-agent -s) && ssh-add /root/.ssh/id_rsa \
    && pip install --no-cache-dir -r requirements.txt
  • 修改bitbucket-pipelines.yml的build命令:
# 先将仓库变量写入临时文件,再挂载为secret
- echo "$SSH_PRIVATE_KEY" > /tmp/id_rsa
- docker build --secret id=ssh_key,src=/tmp/id_rsa --secret id=keys,src=$ENV_PATH -t $AWS_ECR_REPO .

内容的提问来源于stack exchange,提问作者E. Pan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:05:20