【问题标题】:Installing nodejs 10 + npm on alpine linux在 alpine linux 上安装 nodejs 10 + npm
【发布时间】:2020-05-27 03:16:48
【问题描述】:

我正在使用 Alpine 构建我的 Rails 应用程序,但它的一些依赖项存在一些问题。

现在,这是我的 Dockerfile:

FROM ruby:2.5.1-alpine
ENV BUNDLER_VERSION=2.0.2

RUN apk add --update --no-cache \
        binutils-gold \
        build-base \
        curl \
        file \
        g++ \
        gcc \
        git \
        less \
        libstdc++ \
        libffi-dev \
        libc-dev \ 
        linux-headers \
        libxml2-dev \
        libxslt-dev \
        libgcrypt-dev \
        make \
        netcat-openbsd \
        nodejs \
        openssl \
        pkgconfig \
        postgresql-dev \
        python \
        tzdata \
        yarn 

RUN gem install bundler -v 2.0.2
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle config build.nokogiri --use-system-libraries
RUN bundle check || bundle install

COPY . /myapp
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 80

CMD ["rails", "server", "-b", "0.0.0.0", "-p", "80"]

我的entrypoint.sh 文件如下所示:

#!/bin/sh
bundle install
rake db:migrate
rake db:seed
npm install
set -e

rm -f /myapp/tmp/pids/server.pid

exec "$@"

对于npm install,我在尝试安装puppeteer@3.0.0 时遇到问题(由于另一个错误,无法使用3.1.0)。

这是安装 3.1.0 时的错误:

/myapp # npm install puppeteer@3.1.0

> puppeteer@3.1.0 install /myapp/node_modules/puppeteer
> node install.js

/myapp/node_modules/puppeteer/install.js:175
            } catch {
                    ^

SyntaxError: Unexpected token {
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:599:28)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! puppeteer@3.1.0 install: `node install.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the puppeteer@3.1.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-05-26T01_19_13_984Z-debug.log

基于没有成功安装 3.1.0 here,我被告知尝试 3.0.0

所以在尝试安装 3.0.0 时,会发生以下情况:

/myapp # npm install puppeteer@3.0.0

> puppeteer@3.0.0 install /myapp/node_modules/puppeteer
> node install.js

(node:111) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): The "original" argument must be of type function
(node:111) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
+ puppeteer@3.0.0
added 4 packages in 1.264s

根据this,节点版本旧。目前我在运行nodejs8.9.3,如下图:

/myapp # node -v
v8.9.3

我尝试安装nodejs-current,但它似乎已卸载 npm。

/myapp # apk add nodejs-current
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/3) Purging nodejs-npm (8.9.3-r1)
(2/3) Purging nodejs (8.9.3-r1)
(3/3) Installing nodejs-current (9.2.1-r1)
Executing busybox-1.27.2-r11.trigger
OK: 300 MiB in 87 packages
/myapp # node -v
v9.2.1
/myapp # npm install puppeteer@3.0.0
/bin/sh: npm: not found

如何在不卸载 npm 的情况下升级我的 nodejs 版本?如果我再次尝试安装 npm,则会出现以下错误:

/myapp # apk add npm
ERROR: unsatisfiable constraints:
  npm (missing):
    required by: world[npm]
/myapp # apk add --update npm
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
  npm (missing):
    required by: world[npm]

【问题讨论】:

  • 如果你改变这些COPY Gemfile /myapp/GemfileCOPY Gemfile.lock /myapp/Gemfile.lock然后WORKDIR /myapp
  • @SachithMuhandiram 发生同样的事情。
  • 在您的Dockerfile 中添加apk add npm 怎么样?
  • 运行时出现ERROR: unsatisfiable constraints: 错误@SachithMuhandiram
  • Node 如何适应这个应用程序堆栈?您可以使用多阶段构建来组装基于node:lts 图像的前端,然后将COPY 组装到最终应用程序中吗?

标签: node.js ruby-on-rails linux docker npm


【解决方案1】:

在 Dockerfile 或 docker-compose.yml 文件中指定所需的节点版本,就像使用 ruby​​ 一样,FROM ruby:2.5.1-alpine,否则相应地。
检查此link 以获取合适的版本。

【讨论】:

    【解决方案2】:

    您需要使用ruby的升级版本alpine kernel的升级版本。例如,您可以使用ruby:2.5.3-alpine3.9

    FROM ruby:2.5.3-alpine3.9
    ENV BUNDLER_VERSION=2.0.2
    
    RUN apk add --update --no-cache \
            binutils-gold \
            build-base \
            curl \
            file \
            g++ \
            gcc \
            git \
            less \
            libstdc++ \
            libffi-dev \
            libc-dev \ 
            linux-headers \
            libxml2-dev \
            libxslt-dev \
            libgcrypt-dev \
            make \
            netcat-openbsd \
            nodejs \
            npm \
            openssl \
            pkgconfig \
            postgresql-dev \
            python \
            tzdata \
            yarn 
    
    RUN gem install bundler -v 2.0.2
    RUN mkdir /myapp
    WORKDIR /myapp
    COPY Gemfile /myapp/Gemfile
    COPY Gemfile.lock /myapp/Gemfile.lock
    RUN bundle config build.nokogiri --use-system-libraries
    RUN bundle check || bundle install
    

    和几个命令的输出

    / # npm -v
    6.4.1
    / # node -v
    v10.14.2
    / # cat /etc/issue
    Welcome to Alpine Linux 3.9
    Kernel \r on an \m (\l)
    
    

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      相关资源
      最近更新 更多