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

