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

Ruby + Alpine Docker环境已安装git但执行bundle install仍提示找不到git

核心原因

你遇到的报错本质是bundle install执行时,构建环境中没有可执行的git命令,常见诱因有两种:

  1. 你混淆了Drone流水线的执行环境和Docker镜像构建的内部环境:Drone日志里显示的git安装是Drone宿主机/执行器的前置操作,和Docker构建过程内的系统环境完全隔离,不代表Docker镜像构建阶段真的装好了git
  2. Docker构建缓存失效:CI环境中如果开启了构建缓存,之前缓存的apk add层可能没有成功安装git,后续构建直接复用了失效缓存

解决办法

按优先级从高到低尝试:

  • 首先禁用Docker构建缓存:在Drone的Docker构建插件配置中新增no_cache: true参数,或是给docker build命令加上--no-cache选项,强制重新执行所有构建步骤,避免缓存导致的git缺失
  • 调整Dockerfile指令顺序,把依赖安装和bundle操作合并到同一层,确保每次执行bundle前git一定存在,还可以在安装完成后删除构建依赖减小镜像体积:
#####################################
# Backend Dependencies
#####################################
FROM ruby:3.0.2-alpine3.14 AS vendor

# 先拷贝Gemfile再装依赖、执行bundle
COPY Gemfile Gemfile.lock ./
RUN apk add --no-cache \
    sqlite-dev postgresql-dev \
    git build-base && \
    bundle config set --local deployment "true" && \
    bundle config set --local without "development,test" && \
    bundle install && \
    # 可选:删除构建依赖减小镜像体积
    apk del git build-base
  • 若仍报错,可在bundle install前添加调试指令确认git状态,同时显式指定git的绝对路径给bundler:
RUN apk add --no-cache \
    sqlite-dev postgresql-dev \
    git build-base && \
    # 调试指令,构建时会输出git的安装状态
    which git && git --version && \
    # 显式指定git路径
    bundle config set --local git /usr/bin/git && \
    bundle config set --local deployment "true" && \
    bundle config set --local without "development,test" && \
    bundle install
  • 长期规避方案:放弃git源安装gem,将兼容版本的sunspot_rails源码放到项目vendor目录下,用path源引入,完全消除构建时对git的依赖:
# Gemfile中修改为
gem 'sunspot_rails', path: 'vendor/sunspot_rails'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:57:03