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

在Dockerfile中基于Ubuntu通过RVM安装Ruby失败求助

在Ubuntu 24.04 Docker镜像中通过RVM安装Ruby 3.0.0失败(退出码2)的解决方法

你的问题核心在于Docker构建过程中,登录shell的环境初始化逻辑和手动进入容器的交互环境不一致,导致RVM命令无法正常执行。以下是具体的解决思路和修改后的Dockerfile:

问题原因

Docker的RUN bash -l -c命令虽然调用了登录shell,但在非交互的构建环境中,bash不会完整加载~/.bashrc或~/.profile中的RVM初始化脚本,导致rvm命令的环境变量未正确配置,进而安装失败。而手动进入容器时是交互登录shell,会自动加载这些初始化脚本,所以能正常安装Ruby。

解决方案

直接在同一个RUN进程中加载RVM脚本并执行安装,避免依赖登录shell的自动初始化:

修改后的完整Dockerfile

FROM ubuntu:24.04
SHELL ["/bin/bash", "-c"]

# 安装依赖(补充libgdbm-dev,部分Ruby版本可能需要)
RUN apt update && apt install -y \
    gnupg2 curl software-properties-common build-essential \
    libssl-dev zlib1g-dev libreadline-dev libyaml-dev \
    libsqlite3-dev sqlite3 libxml2-dev libxslt-dev \
    autoconf automake libtool bison libffi-dev libgdbm-dev

# 导入RVM密钥
RUN gpg2 --keyserver hkp://keyserver.ubuntu.com --recv-keys \
    409B6B1796C275462A1703113804BB82D39DC0E3 \
    7D2BAF1CF37B13E2069D6956105BD0E739499BDB

# 下载并安装RVM,同时完成Ruby 3.0.0的安装
RUN curl -sSL https://get.rvm.io -o rvm.sh && \
    bash rvm.sh stable && \
    source ~/.rvm/scripts/rvm && \
    rvm install 3.0.0 --disable-binary && \
    rvm use 3.0.0 --default && \
    rm -f rvm.sh

关键修改说明

  1. 合并RUN命令:将RVM安装、Ruby安装等步骤合并到同一个RUN中,确保环境变量在同一个进程中生效(Docker每个RUN都是独立进程,前一个RUN的环境不会传递到下一个)。
  2. 手动加载RVM脚本:通过source ~/.rvm/scripts/rvm直接加载RVM的初始化脚本,替代依赖登录shell的方式,保证rvm命令能被正确识别。
  3. 添加--disable-binary参数:强制编译安装Ruby,避免预编译二进制包与Ubuntu 24.04环境的兼容性问题。
  4. 清理临时文件:删除下载的rvm.sh,减小镜像体积。

验证方法

构建镜像后,运行容器并执行ruby -v,确认Ruby 3.0.0已正确安装:

docker run --rm <镜像名> ruby -v

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:15:04