【问题标题】:Running a nodejs app on a docker container gives " Error: Cannot find module '/usr/src/app/nodemon' "在 docker 容器上运行 nodejs 应用程序会给出“错误:找不到模块'/usr/src/app/nodemon'”
【发布时间】:2020-07-19 18:27:48
【问题描述】:

这是我的 Dockerfile,它位于 nodejs 应用程序的根目录。

# Build from  LTS version of node (version 12)
FROM node:12

# Create app directory
RUN mkdir -p /usr/src/app

# Define app diretory inside image
WORKDIR /usr/src/app

# package.json AND package-lock.json are copied where available 
COPY package*.json /usr/src/app/

# install modules
RUN npm install

# Bundle app source
COPY . /usr/src/app

# Bind app to port 3000
EXPOSE 3000

# Command to run app
CMD [ "nodemon", "./bin/www" ]

这是我的docker-compose.yml 文件

version: '2'
services:
  mongo:
    container_name: mongo
    image: 'mongo:3.4.1'
    ports:
      - "27017:27017" 
  backend-app:
    container_name: school-backend
    restart: always
    build: ./server
    ports:
      - "3000:3000"
  frontend-app:
    container_name: angular-frontend
    restart: always
    build: ./angular-app
    ports:
      - "4200:4200"

我执行命令docker-compose up

然后我得到这个错误

school-backend  | Error: Cannot find module '/usr/src/app/nodemon'
school-backend  |     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:966:15)
school-backend  |     at Function.Module._load (internal/modules/cjs/loader.js:842:27)
school-backend  |     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
school-backend  |     at internal/main/run_main_module.js:17:47 {
school-backend  |   code: 'MODULE_NOT_FOUND',
school-backend  |   requireStack: []
school-backend  | }

在 Dockerfile 中,我将package.json 复制到工作目录/usr/src/app\

然后我执行npm install,它将安装nodemon,因为它在package.json 中声明

但是,为什么给定的模块不存在?

【问题讨论】:

  • 一旦你构建了镜像,Node 源将永远不会改变;如果您更新图像,则需要删除并重新创建容器。所以运行nodemon 不会在这里添加任何东西,你可以直接运行node

标签: node.js docker npm docker-compose dockerfile


【解决方案1】:

那么它不是全局安装的。

在这种情况下,您必须调用 node_modules 中的 nodemon bin:./node_modules/nodemon/bin/nodemon.js

【讨论】:

    【解决方案2】:

    您可以像这样使用npx CMD [ "npx", "nodemon", "./bin/www" ]

    npx 将从node_modules/.bin 目录运行程序。

    【讨论】:

    • npx 命令在 docker 容器中不起作用。
    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2023-01-05
    • 2019-08-10
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多