我对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图层概念并试图复制一些既不起作用的代码
答案 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
...