带有json-server的Docker应用程序找不到npm模块

vcirk6k6  于 2023-01-08  发布在  Docker
关注(0)|答案(1)|浏览(273)

我有一个非常简单的Docker应用程序,它使用json-server作为假后端,但由于一些奇怪的原因,我无法让它工作。
我在其中构建该文件的目录包含一个Dockerfile、server.js和db.json。

FROM node:latest
RUN npm install json-server -g
WORKDIR /app
ADD . /app
EXPOSE 3004
CMD ["node", "server.js"]

json-server本身非常简单:

const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()

server.use(middlewares)
server.use(router)
server.listen(3004, () => {
  console.log('JSON Server is running')
})

Docker能够构建这个映像。但是当我尝试运行它时,我得到了以下错误:

node:internal/modules/cjs/loader:1042
  throw err;
  ^

Error: Cannot find module 'json-server'
Require stack:
- /app/server.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1039:15)
    at Module._load (node:internal/modules/cjs/loader:885:27)
    at Module.require (node:internal/modules/cjs/loader:1105:19)
    at require (node:internal/modules/cjs/helpers:103:18)
    at Object.<anonymous> (/app/server.js:1:20)
    at Module._compile (node:internal/modules/cjs/loader:1218:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
    at Module.load (node:internal/modules/cjs/loader:1081:32)
    at Module._load (node:internal/modules/cjs/loader:922:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:82:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/app/server.js' ]
}

为什么它找不到json-server模块,尤其是当我刚刚全局安装它的时候?我很困惑,因为它不能再简单了。

eeq64g8w

eeq64g8w1#

节点映像没有设置NODE_PATH环境变量,因此节点无法找到全局安装的模块。
由于容器只用于运行单个进程,因此全局安装容器实际上没有意义。
如果您在/app目录中非全局安装模块,它将工作:

FROM node:latest
WORKDIR /app
RUN npm install json-server
ADD . /app
EXPOSE 3004
CMD ["node", "server.js"]

相关问题