You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker构建时pip安装私有GitHub包失败(错误码128)排查

解决Docker构建时pip安装私有GitHub包的Exit Status 128错误

错误原因分析

你遇到的exit status 128是Git的典型认证或URL解析失败错误。有意思的是你直接用git clone git@github.com:organization/my-package.git能成功,但通过pip从requirements.txt安装就失败——核心问题出在pip对git+ssh URL的解析逻辑上:

你当前requirements.txt里的条目是:

git+ssh://git@github.com:organization/my-package@master#egg=my_package

这里的github.com:organization部分,在SSH协议URL里,冒号会被解析成端口号,而organization显然不是合法的端口值,导致Git无法正确连接到GitHub仓库,最终克隆失败。


解决方案

1. 修正requirements.txt中的URL格式

把私有包的URL改成两种兼容pip的格式之一,既能保留统一管理,又能避免解析错误:

  • SSH协议标准格式(用斜杠替代冒号):
    git+ssh://git@github.com/organization/my-package@master#egg=my_package
    
  • Git简写格式(和你手动clone用的URL一致,pip完全支持):
    git+git@github.com:organization/my-package.git@master#egg=my_package
    

2. 确保Docker中SSH密钥的有效性

虽然你已经配置了SSH密钥,但Docker的RUN指令是独立进程,ssh-agent的环境变量可能在后续指令中丢失。建议把密钥配置和pip安装放到同一个RUN块里,同时给私钥设置正确权限(SSH会拒绝权限过宽的私钥):

RUN mkdir /root/.ssh && \
    mv deploy_key_private /root/.ssh/id_rsa && \
    chmod 600 /root/.ssh/id_rsa && \
    ssh-keyscan -H github.com >> /root/.ssh/known_hosts && \
    eval $(ssh-agent) && ssh-add /root/.ssh/id_rsa && \
    pip install --upgrade pip && \
    pip install --prefix=/install -r /var/www/requirements.txt --log logs.txt

3. 额外验证步骤

为了提前排查问题,可以在pip安装前添加一个SSH连接测试:

RUN ssh -T git@github.com

如果输出Hi organization/my-package! You've successfully authenticated, but GitHub does not provide shell access.,说明SSH认证完全正常,剩下的就是pip的URL格式问题了。


最后确认点

  • 确保你的Deploy Key已经添加到目标私有仓库,并且开启了只读权限(不需要写权限,足够安装使用)
  • 检查私钥文件在构建时是否完整复制,没有损坏

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

火山引擎 最新活动