我有一个非常简单的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
模块,尤其是当我刚刚全局安装它的时候?我很困惑,因为它不能再简单了。
1条答案
按热度按时间eeq64g8w1#
节点映像没有设置NODE_PATH环境变量,因此节点无法找到全局安装的模块。
由于容器只用于运行单个进程,因此全局安装容器实际上没有意义。
如果您在
/app
目录中非全局安装模块,它将工作: