【问题标题】:Missing `node_modules` in Docker ContainerDocker 容器中缺少“node_modules”
【发布时间】:2017-10-31 06:57:17
【问题描述】:

我正在使用以下 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" ]

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

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

【问题讨论】:

  • 也许问题在于COPY . . 会覆盖npm install 已安装的所有内容?尝试将COPY package.json . 替换为COPY . .,因为您的package.json 也应使用此命令进行复制。
  • @vfsoraki 并非如此。我已尝试将 COPY . . 部分注释掉,但 node_modules 仍然缺失。
  • 一次性运行 npm,类似于 RUN npm install && npm rebuild bcrypt --build-from-source
  • @user2915097 也不起作用。

标签: node.js docker dockerfile npm-install


【解决方案1】:

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

RUN mkdir <workdir>/node_modules

(将&lt;workdir&gt;替换为keymetrics/pm2图像的实际默认工作目录)

【讨论】:

    【解决方案2】:

    我会说这是一个目录问题。 你会想要设置

    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
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,与无效的 package.json 文件有关,尤其是 name 字段。删除 name 字段中的空格后,它正确创建了 node_modules。因此,如果您有此类错误,请注意。

      【讨论】:

        猜你喜欢
        • 2021-11-22
        • 2019-10-28
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 2020-01-04
        • 2016-05-12
        • 2016-12-08
        • 1970-01-01
        相关资源
        最近更新 更多