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

如何通过docker-compose将SSH代理转发到容器以拉取Git依赖?

问题排查与解决方案

遗漏的配置项

  • 构建阶段与运行阶段配置隔离
    你在docker-compose.yml中配置的SSH代理挂载、环境变量仅作用于容器运行阶段,而pip拉取Git依赖是在镜像构建阶段执行的,构建阶段默认无法访问运行阶段的挂载资源,所以构建过程找不到SSH代理,自然拉取失败。
  • 未配置目标Git服务的主机公钥
    Host key verification failed报错是因为SSH连接时会校验目标主机的公钥是否在本地known_hosts文件中,容器内默认没有存储bitbucket.org的公钥,SSH会拒绝未授信的主机连接。
  • 未开启构建阶段的SSH代理权限
    Docker默认不会将宿主机的SSH代理暴露给构建过程,需要通过BuildKit的SSH挂载功能显式授权。

具体修复步骤

  1. 开启Docker BuildKit支持,在执行构建命令前先设置环境变量:
export DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1
  1. 修改docker-compose.yml的build配置,开启构建阶段SSH权限:
#docker-compose.yml
services:
  web:
    build:
      context: .
      ssh:
        - default # 挂载宿主机默认SSH代理到构建过程
    command: python manage.py run -h 0.0.0.0
    # 运行阶段需要SSH的话保留原有配置
    volumes:
      - $SSH_AUTH_SOCK:/ssh-agent
    environment:
        SSH_AUTH_SOCK: /ssh-agent
  1. 修改Dockerfile,安装SSH客户端、预添加bitbucket公钥、配置构建阶段SSH挂载:
# 前置步骤省略,安装基础依赖后执行以下操作
RUN apt-get update && apt-get install -y --no-install-recommends openssh-client && rm -rf /var/lib/apt/lists/*

# 预添加bitbucket.org的公钥到授信列表
RUN mkdir -p /root/.ssh && \
    ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts && \
    chmod 700 /root/.ssh && chmod 600 /root/.ssh/known_hosts

# 构建时挂载SSH代理,执行依赖安装
RUN --mount=type=ssh pip install -r requirements.txt

SSH代理转发的作用

SSH代理转发可以让远端环境(此处为Docker容器)直接使用本地宿主机上已加载的SSH密钥完成身份认证,不需要将私钥复制到远端环境中,全程私钥不会离开本地机器,既避免了私钥泄露的风险,也省去了在多个远端环境配置密钥的重复工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:30:05