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

Ubuntu 18.04 Docker镜像中Ruby 2.7.2源码安装失败求助

问题分析与解决方案

核心问题1:Dockerfile的RUN上下文隔离

每个RUN指令在独立的shell进程中执行,RUN cd ruby-2.7.2的目录切换不会延续到后续RUN,导致./ruby-2.7.2/configure实际在/root目录执行,路径错误是依赖检测失败的关键原因之一。

核心问题2:缺失编译依赖

错误提示中dbm、readline、gdbm等扩展无法编译,是因为缺少对应的开发依赖包;同时OpenSSL路径未明确指定,导致configure脚本无法识别已安装的openssl。

修正后的Dockerfile

# Pull base image.
FROM ubuntu:18.04
ARG APP_NAME=<appname>

# Install dependencies
RUN apt-get update && \
    apt-get -y upgrade && \
    apt-get install -y build-essential \
                        openssl \
                        libssl-dev \
                        zlib1g-dev \
                        software-properties-common \
                        byobu \
                        curl \
                        git \
                        htop \
                        man \
                        unzip \
                        vim \
                        wget \
                        libffi-dev \
                        # 补充缺失的编译依赖
                        libreadline-dev \
                        libgdbm-dev \
                        libdb-dev && \
    rm -rf /var/lib/apt/lists/*

# 下载、解压并编译安装Ruby 2.7.2
RUN wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.2.tar.bz2 && \
    tar -xf ruby-2.7.2.tar.bz2 && \
    cd ruby-2.7.2 && \
    # 指定系统默认OpenSSL安装路径
    ./configure --prefix=/my/ruby/dir --with-openssl-dir=/usr && \
    make && \
    make install && \
    # 清理安装包减少镜像体积
    cd /root && \
    rm -rf ruby-2.7.2 ruby-2.7.2.tar.bz2

# Set environment variables.
EXPOSE 5000

ENV HOME /root
ENV PATH="${PATH}:/my/ruby/dir/bin"

# Define working directory.
WORKDIR /root
COPY ${APP_NAME}/ ./${APP_NAME}/

# Define default command.
CMD ["bash"]

关键修正点说明

  • 合并RUN指令:将下载、解压、编译命令放在同一个RUN中,确保目录切换的上下文被后续命令继承。
  • 补充依赖包:添加libreadline-dev、libgdbm-dev、libdb-dev,解决readline、gdbm、dbm扩展的编译问题。
  • 明确OpenSSL路径:通过--with-openssl-dir=/usr指定系统OpenSSL位置,解决openssl扩展无法编译的问题。
  • 清理冗余文件:编译完成后删除源码包和目录,压缩镜像体积。
  • 修正PATH变量:将/my/ruby/dir/bin加入PATH,确保ruby、gem等命令可直接调用。

关于rvm无法识别的补充说明

如果后续想尝试rvm,需在安装后加载初始化脚本,可在Dockerfile中添加:

RUN gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB && \
    curl -sSL https://get.rvm.io | bash -s stable && \
    echo "source /etc/profile.d/rvm.sh" >> ~/.bashrc

启动容器时使用bash -l作为默认命令,确保rvm被正确加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:00:52