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

Dockerfile拉取Bitbucket私有仓库遇公钥权限拒绝问题排查

解决Docker构建时Bitbucket私有仓库依赖安装权限问题

问题背景

我的Python项目requirements.txt依赖Bitbucket私有仓库:

git+ssh://git@bitbucket.org/mycompany/myproject.git

本地环境可正常安装依赖,但Docker构建时遇到权限报错。

当前配置

Docker Compose配置

已使用ssh选项转发本地SSH配置:

services:
  myservice:
    ...
    build:
      context: .
      ssh:
        - default
      dockerfile: ./Dockerfile

Dockerfile配置

已安装git、openssh并配置Bitbucket的known_hosts:

# 安装依赖工具
RUN apt-get update && apt-get install -y git openssh-client libpq-dev

# SSH配置
RUN mkdir -p -m 0600 ~/.ssh
RUN touch ~/.ssh/known_hosts
RUN curl https://bitbucket.org/site/ssh >> ~/.ssh/known_hosts

# 安装Python依赖
RUN pip3 install --upgrade pip
COPY ./myproject /var/www/html/myproject
WORKDIR /var/www/html/myproject
RUN pip3 install -r requirements.txt

报错情况

构建最后一步执行pip install时出现:

git@bitbucket.org: Permission denied (publickey)

已确认容器内known_hosts包含Bitbucket密钥,且进入容器bash手动执行pip3 install -r requirements.txt可成功安装,但希望实现自动化构建,无需手动操作。

解决方案

1. 验证构建时SSH代理连通性

在Dockerfile中添加调试命令,确认SSH权限是否正常:

RUN ssh -T git@bitbucket.org

若此命令能成功返回Bitbucket欢迎信息,说明SSH代理传递正常,问题出在pip执行的环境上下文。

2. 明确指定SSH密钥路径(可选)

若默认代理存在问题,可在Docker Compose中指定具体密钥:

build:
  ...
  ssh:
    - default=/home/your-user/.ssh/id_rsa

或使用主机SSH代理套接字:

build:
  ...
  ssh:
    - ssh://${USER}@/run/host-services/ssh-auth.sock

3. 调整pip install的执行权限

手动执行成功说明容器内环境正常,可能是COPY操作后用户权限变化导致SSH密钥无法访问。可尝试:

# 确保SSH目录权限归属当前用户
RUN chown -R $(whoami):$(whoami) ~/.ssh

# 或切换至root用户执行依赖安装
USER root
RUN pip3 install -r requirements.txt
USER original-user

4. 核对Bitbucket密钥指纹

重新验证容器内known_hosts的密钥指纹是否正确:

# 本地执行获取正确指纹
ssh-keyscan bitbucket.org | ssh-keygen -lf -

对比容器内~/.ssh/known_hosts中的内容,确保指纹完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:25:01