在Docker容器中缺少`node_modules`

时间:2017-10-31 06:57:18

标签: node.js docker dockerfile npm-install

我正在使用以下Dockerfile为我的Node.js应用程序构建一个docker docker镜像:

FROM keymetrics/pm2:latest

RUN apk add --no-cache --update alpine-sdk python

# Bundle APP files
COPY package.json .

# Install app dependencies
ENV NPM_CONFIG_LOGLEVEL warn
RUN npm install
RUN npm rebuild bcrypt --build-from-source

COPY . .

# Show current folder structure in logs
RUN ls -al

EXPOSE 3000
VOLUME /app/uploads

CMD [ "pm2-docker", "start", "pm2.json" ]

问题是从此映像创建的docker容器中不存在node_modules文件夹,因此应用程序遇到错误将无法运行。

我的node_modules文件中有.dockerignore,但由于我在构建过程(RUN npm install)中安装了必要的软件包,因此不会导致问题。

3 个答案:

答案 0 :(得分:0)

那么为什么不在构建时创建这个目录(即在Dockerfile之前在RUN npm install中添加以下行?)

RUN mkdir <workdir>/node_modules

(将<workdir>替换为keymetrics/pm2图片的实际默认工作目录)

答案 1 :(得分:0)

我会说这是目录问题。 您将要设置

ENV ROOT /usr/src/app
WORKDIR ${ROOT}

之前

# Bundle APP files
COPY package.json .

示例:

FROM node:8

ENV ROOT /usr/src/app
WORKDIR ${ROOT}

COPY package*.json ./

RUN yarn -i --quiet

# Bundle app source
COPY . .

ENV NODE_ENV development

CMD yarn run start:dev

EXPOSE 3000

答案 2 :(得分:0)

我遇到了同样的问题,与无效的 package.json 文件有关,尤其是 name 字段。删除 name 字段中的空格后,它正确创建了 node_modules。所以如果你有这样的错误,请注意。 enter image description here