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
相关产品推荐
相关产品推荐

