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

Docker容器中Composer通过SSH拉取私有仓库依赖失败排查

用Docker容器内的Composer通过SSH拉取GitHub私有依赖的解决方案

完全可以通过SSH解决,核心是解决容器内的用户权限、SSH密钥挂载/传递以及目录权限问题,以下是可行的分步方案:

方案1:复用本地SSH Agent(推荐)

利用本地已启动的ssh-agent,让容器直接使用本地已授权的密钥,无需在容器内挂载密钥文件,从根源避免权限问题:

  1. 先在本地启动并配置ssh-agent:
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

验证本地SSH连接正常:ssh -T git@github.com

  1. 运行Composer容器时挂载ssh-agent套接字:
docker run --rm \
  -u $(id -u):$(id -g) \
  -v $SSH_AUTH_SOCK:/ssh-agent \
  -e SSH_AUTH_SOCK=/ssh-agent \
  -v $(pwd):/app \
  composer install
  • -u $(id -u):$(id -g):以当前本地用户的UID/GID运行容器,保证生成的vendor目录权限与本地一致
  • -v $SSH_AUTH_SOCK:/ssh-agent:将本地ssh-agent的套接字挂载到容器内
  • -e SSH_AUTH_SOCK=/ssh-agent:告诉容器ssh-agent的路径

方案2:直接挂载SSH密钥并修正权限

如果不想依赖本地ssh-agent,可直接挂载密钥文件,但必须严格修正容器内的权限(Alpine镜像对SSH密钥权限要求严格):

docker run --rm \
  -u $(id -u):$(id -g) \
  -v ~/.ssh/id_rsa:/home/composer/.ssh/id_rsa:ro \
  -v ~/.ssh/id_rsa.pub:/home/composer/.ssh/id_rsa.pub:ro \
  -v ~/.ssh/known_hosts:/home/composer/.ssh/known_hosts:ro \
  -v $(pwd):/app \
  composer sh -c "chmod 600 /home/composer/.ssh/id_rsa && chmod 700 /home/composer/.ssh && composer install"
  • :ro:只读挂载密钥文件,提升安全性
  • chmod 600:将私钥权限设置为仅所有者可读,符合SSH的安全要求
  • chmod 700:确保.ssh目录权限正确,避免被其他用户访问

关键排查步骤

如果仍有问题,可在容器内测试SSH连接:

docker run --rm \
  -u $(id -u):$(id -g) \
  -v $SSH_AUTH_SOCK:/ssh-agent \
  -e SSH_AUTH_SOCK=/ssh-agent \
  composer ssh -T git@github.com

若提示无法创建.ssh目录,可手动创建并设置权限:

docker run --rm \
  -u $(id -u):$(id -g) \
  composer sh -c "mkdir -p /home/composer/.ssh && chmod 700 /home/composer/.ssh && ssh-keyscan github.com >> /home/composer/.ssh/known_hosts"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:30:07