You need to enable JavaScript to run this app. 如何在Docker环境下通过SSH使用Composer安装私有VCS仓库
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker环境下通过SSH使用Composer安装私有VCS仓库

问题根因
  • 初始状态下PHP容器内没有配置对应私有仓库的SSH身份凭证,git克隆时无法完成公钥校验,直接报Permission denied (public key)
  • 全量挂载宿主机~/.ssh目录时,会把Mac系统专属的SSH配置(usekeychain)带入容器,容器内运行的Linux版OpenSSH不识别该参数,直接终止SSH流程报配置错误
  • 宿主机缺少项目依赖的Memcached扩展,无法在本地直接运行Composer命令完成依赖安装
落地解决流程

1. 搭建容器专用的精简SSH目录

不要全量挂载宿主机的~/.ssh目录,单独准备一份适配容器的SSH配置,避免带入宿主机专属参数:

  • 在项目目录下新建专用文件夹,比如docker/.ssh
  • 从宿主机~/.ssh目录中复制拉取私有仓库需要的核心文件,不要带其他无关配置:
    • 用于Git认证的私钥文件(如id_rsa/id_ed25519)
    • known_hosts已知主机列表文件
  • 手动编写适配容器的SSH配置文件,删掉所有Mac专属的配置项(尤其是报错提到的usekeychain),参考配置:
    Host privaterepo.com
        HostName privaterepo.com
        User git
        IdentityFile /root/.ssh/你的私钥文件名
        StrictHostKeyChecking no
    
  • 给目录和文件设置SSH要求的严格权限,避免SSH因权限异常拒绝加载:
    chmod 700 ./docker/.ssh
    chmod 600 ./docker/.ssh/*
    

    注意:这个目录里包含私钥,一定要在.gitignore里加排除规则,不要提交到代码仓库,每个团队成员在自己本地生成对应的专属配置即可。

2. 修改Docker Compose挂载配置

将原来全量挂载宿主机~/.ssh的配置,替换成挂载上面准备的精简SSH目录:

php:
  volumes:
    # 删除原有的 ~/.ssh 全量挂载规则
    - ./docker/.ssh:/root/.ssh

3. 验证SSH连通性

重启PHP容器后,先进入容器测试和私有仓库的SSH连通状态,避免直接跑Composer绕弯:

# 进入PHP容器终端
docker exec -it mysite_php_1 bash
# 测试私有仓库SSH连通
ssh -T git@privaterepo.com

如果返回正常的认证成功提示,就说明凭证配置已经生效。

4. 执行Composer安装命令

连通性验证通过后,直接在容器内执行原来的Composer require命令即可,不会再出现公钥权限报错、SSH配置不兼容的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 14:54:05