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

Docker容器中Poetry安装Bitbucket依赖报错求助

Docker容器中通过Poetry拉取Bitbucket/GitHub SSH依赖的解决方案

核心问题分析

报错中的Host key verification failed是关键原因:容器环境默认没有Bitbucket/GitHub的SSH主机密钥,导致SSH连接被拒绝;同时Poetry默认使用的dulwich纯Python Git库对SSH代理支持有限,不如系统原生Git可靠。

可行解决方案

1. 切换Poetry使用系统Git替代Dulwich

Dulwich对SSH的支持存在局限性,配置Poetry调用系统git命令可解决大部分连接问题:

# 安装Poetry后添加以下配置
RUN poetry config virtualenvs.create false \
    && poetry config git.cli true

2. 处理SSH主机密钥验证

方案A:预添加主机密钥(生产环境推荐)

在Dockerfile中预先写入Bitbucket/GitHub的SSH主机密钥,避免连接时的验证失败:

RUN mkdir -p ~/.ssh \
    && ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts \
    && ssh-keyscan github.com >> ~/.ssh/known_hosts

若需确保密钥安全,可从官方渠道获取公钥后手动添加,避免中间人攻击。

方案B:临时禁用严格主机密钥检查(仅测试环境)

测试场景下可临时关闭验证,生产环境禁止使用:

RUN echo "StrictHostKeyChecking no" >> ~/.ssh/config

3. 确保Docker构建时SSH密钥正确传递

使用Docker BuildKit的SSH代理

你的构建命令已启用SSH代理,但需确保Dockerfile配合BuildKit特性使用:

# 安装依赖时通过mount启用SSH代理
RUN --mount=type=ssh poetry install --no-root

若用Docker Compose构建,需在docker-compose.yml中配置:

services:
  your-service:
    build:
      context: .
      ssh:
        - default=${SSH_AUTH_SOCK}

4. 完整Dockerfile示例

FROM python:3.10-slim

ENV POETRY_VERSION=1.2.2
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# 安装系统依赖(Git和SSH客户端)
RUN apt-get update && apt-get install -y --no-install-recommends \
    git \
    openssh-client \
    && rm -rf /var/lib/apt/lists/*

# 配置SSH主机密钥
RUN mkdir -p ~/.ssh \
    && ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts \
    && ssh-keyscan github.com >> ~/.ssh/known_hosts

# 安装Poetry并配置使用系统Git
RUN pip install poetry==$POETRY_VERSION \
    && poetry config virtualenvs.create false \
    && poetry config git.cli true

# 复制依赖文件
COPY ./poetry.lock ./pyproject.toml ./

# 安装依赖
RUN --mount=type=ssh poetry install --no-root

5. 构建命令调整

确保启用Docker BuildKit(Docker 18.09+默认支持):

export DOCKER_BUILDKIT=1
docker build --no-cache --ssh default -t $IMAGE_NAME .

额外验证步骤

  • 确认本地SSH密钥可正常克隆目标仓库:git clone git@bitbucket.org:tenant/repo.git
  • 在Dockerfile中添加调试步骤验证SSH连接:
    RUN ssh -T git@bitbucket.org
    
    输出内容可帮助排查权限或密钥问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:55:18