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

如何在ruby:2.7.1-alpine的Dockerfile中升级Node.js至16+版本?

Ruby Alpine镜像安装Node.js 18的解决方案

ruby:2.7.1-alpine基于Alpine 3.13,默认软件源仅提供最高14.x版本的Node.js,无法满足React开发对Node.js ≥16的要求。以下两种方案可实现Node.js 18的安装:

方案一:通过Node官方Alpine源安装

沿用apk包管理体系,操作更贴合Alpine生态:

修改步骤:

  • 从PACKAGES变量中移除nodejs-current,避免版本冲突
  • 添加Node.js 18的官方Alpine软件源(适配Alpine 3.13版本)
  • 安装Node.js 18

修改后的Dockerfile:

FROM ruby:2.7.1-alpine

ARG RAILS_ROOT=/task_manager
# 移除nodejs-current,保留原有其他依赖
ARG PACKAGES="vim openssl-dev postgresql-dev build-base curl yarn less tzdata git postgresql-client bash screen gcompat"

RUN apk update \
    && apk upgrade \
    && apk add --update --no-cache $PACKAGES \
    # 导入NodeSource公钥并添加Node.js 18的Alpine源
    && curl -fsSL https://rpm.nodesource.com/pub_18.x/alpine/3.13/x86_64/nodesource.pubkey | apk add --no-cache --repository=https://rpm.nodesource.com/pub_18.x/alpine/3.13/x86_64/ nodejs

RUN gem install bundler:2.1.4

RUN mkdir $RAILS_ROOT
WORKDIR $RAILS_ROOT
COPY Gemfile Gemfile.lock  ./
RUN bundle install --jobs 5

COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile

ADD . $RAILS_ROOT
ENV PATH=$RAILS_ROOT/bin:${PATH}

EXPOSE 3000
CMD bundle exec rails s -b '0.0.0.0' -p 3000

方案二:使用nvm版本管理器安装

适合需要灵活切换Node.js版本的场景:

修改步骤:

  • 确保依赖中包含curl和bash(已在你的PACKAGES中)
  • 下载并安装nvm
  • 通过nvm安装Node.js 18并设置为默认版本
  • 执行yarn和启动命令时加载nvm环境

修改后的Dockerfile:

FROM ruby:2.7.1-alpine

ARG RAILS_ROOT=/task_manager
ARG PACKAGES="vim openssl-dev postgresql-dev build-base curl yarn less tzdata git postgresql-client bash screen gcompat"

RUN apk update \
    && apk upgrade \
    && apk add --update --no-cache $PACKAGES \
    # 安装nvm
    && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash \
    # 加载nvm并安装Node.js 18
    && source ~/.bashrc && nvm install 18 && nvm alias default 18

RUN gem install bundler:2.1.4

RUN mkdir $RAILS_ROOT
WORKDIR $RAILS_ROOT
COPY Gemfile Gemfile.lock  ./
RUN bundle install --jobs 5

# 加载nvm环境后执行yarn
COPY package.json yarn.lock ./
RUN source ~/.bashrc && yarn install --frozen-lockfile

ADD . $RAILS_ROOT
ENV PATH=$RAILS_ROOT/bin:${PATH}

EXPOSE 3000
# 启动时加载nvm环境
CMD source ~/.bashrc && bundle exec rails s -b '0.0.0.0' -p 3000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:53:22