Dockerfile返回在构建时找不到的npm

时间:2018-03-03 20:14:30

标签: docker dockerfile

我对Docker很陌生,并希望创建一个容器,其中包含我所有的Ruby on Rails网站及其依赖项。我阅读了大量的文件和如何做,但我一直在努力。

由于我使用Rubymine,因此有一个内置工具允许您从您在其中创建的Dockerfile中对当前项目进行Docker化。但是,我一直有错误" npm not found,而NodeJS 应该安装。

这是我的Dockerfile:

FROM ruby:2.4.3
MAINTAINER Jaeger
RUN apt-get update -qq && apt-get install -y build-essential nodejs

RUN mkdir -p /app
WORKDIR /app

COPY package.json /app
RUN npm i -g yarn && yarn

COPY Gemfile Gemfile.lock ./
RUN gem install bundler && bundle install --jobs 20 --retry 5
RUN yarn

COPY . ./

EXPOSE 3000

CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]

最终的目标应该是,因为我在其中使用Webpacker和React(它是一个虚拟项目进行测试,但真正的网站有这个),我想安装Yarn,并使Yarn安装所有的依赖。

我发现其他一些人遇到同样的问题却迷失了,想要了解Docker图层概念并试图复制一些既不起作用的代码

2 个答案:

答案 0 :(得分:8)

在运行npm install之前,您需要在容器中显式安装node / npm。将其添加到Dockerfile。

RUN apt-get update && apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash -
RUN apt-get update && apt-get install -y nodejs

答案 1 :(得分:0)

另一种解决方案(可能更干净)是在安装依赖项之前先挂载/设置工作目录:

FROM ruby:2.4.3
MAINTAINER Jaeger

RUN mkdir -p /app
WORKDIR /app

RUN apt-get update -qq && apt-get install -y build-essential nodejs

...