node.js - 使用 Windows 10 使用 nodemon 进行 Docker 热重载 Node 应用程序

标签 node.js windows docker express nodemon

我有一个 Express 应用程序,我正在尝试使用 Windows 10 的 docker 作为开发环境,使用 Nodemon 设置热重载。但是,当我在卷上进行 npm install 时,它似乎不起作用。

使用 powershell,我使用如下所示的卷:

docker build -t node-api .

docker run --rm -it -p 8080:8080 -v "${PWD}:/usr/src/app" node-api

输出此错误:

[nodemon] 1.18.6
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node server/server.js`
internal/modules/cjs/loader.js:605
    throw err;
    ^

Error: Cannot find module 'express'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:603:15)
    at Function.Module._load (internal/modules/cjs/loader.js:529:25)
    at Module.require (internal/modules/cjs/loader.js:658:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/usr/src/app/server/server.js:1:79)
    at Module._compile (internal/modules/cjs/loader.js:722:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:733:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
[nodemon] app crashed - waiting for file changes before starting...

如果我排除 -v 标志并 docker run,那么它会正常启动,但不会检测更改或在文件保存时重新启动。

Dockerfile

FROM node:alpine

#Create app directory
WORKDIR /usr/src/app

#Install nodemon for hot reloading
RUN npm install nodemon -g

#Install app dependencies
#A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./

RUN npm install

#Bundle app source
COPY . .

EXPOSE 8080
CMD [ "nodemon", "-L", "server/server.js" ]

文件夹结构

server/

    >server.js

Dockerfile

package.json

Github repo代码

最佳答案

问题在于,通过将整个主机 app/ 目录挂载为卷,容器内的 app/node_modules/ 将被主机的 app/ 覆盖,从而丢失所有依赖项。

解决办法是只挂载你需要的源代码文件夹,即

docker run --rm -it -p 8080:8080 -v "${PWD}/server:/usr/src/app/server" node-api

关于node.js - 使用 Windows 10 使用 nodemon 进行 Docker 热重载 Node 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53419922/

相关文章:

node.js - NestJS 中同一 Controller (路由别名)的两个端点

Javascript - 字符串匹配错误输出

ruby-on-rails - 安装 Rails 失败, "failed to build gem native extension"

Windows Azure 分页大型数据集解决方案

node.js - 在 Mongoose 中更新子文档

c++ - Rcpp、C++11、 vector 和 Windows 的问题

c# - 为性能计数器安装 Total 实例

python - 如何将kubernetes实现的 secret 环境变量获取到python中?

Docker-compose 使用主机环境变量

docker - 如何在卷中挂载单个文件