如何在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
相关产品推荐
相关产品推荐

