node.js - 如何在docker中创建live-reload开发环境? (NodeJS、Redis 和 Vue)

标签 node.js docker docker-compose environment-variables

我一直在尝试在我的Windows机器上创建一个docker开发环境。我的应用程序的结构是一个express/node后端、一个vue-cli生成的客户端和一个用于缓存的redis服务器。

我设法让项目运行起来,但是我遇到的最后一个问题是热重载。我已安装 nodemon 作为依赖项,并将脚本添加到 package.json 文件中。每当我对服务器进行更改时,我希望项目重新启动并显示新的更新。这是我当前的设置。从我读到的内容来看,这与卷有关(我对 docker 很陌生)。

API/服务器目录结构

backend
- server.js (express server)
- Dockerfile
- docker-compose.yml
- Models
- ect...

Dockerfile

FROM node:8
WORKDIR /app
COPY package.json /app
COPY . /app
RUN npm install
CMD ["npm", "start"]
EXPOSE 3000

docker-compose.yml

version: "3"
services:
  web:
    container_name: web-container
    restart: always
    depends_on:
      - redis
    build: . 
    volumes:
      - .:/app
    ports: 
      - "80:3000"
    links: 
      - redis
  redis:
    container_name: redis-container
    image: "redis:latest"
    ports:
      - "6379:6379"
    volumes:
      - ./data:/data

重要:

在Web服务上添加volumes字段时,抛出以下错误

web-container | > projectname@1.0.0 start /app
web-container | > nodemon server.js --trace-warnings
web-container |
web-container | sh: 1: nodemon: not found
web-container | npm ERR! code ELIFECYCLE
web-container | npm ERR! syscall spawn
web-container | npm ERR! file sh
web-container | npm ERR! errno ENOENT
web-container | npm ERR! projectname@1.0.0 start: `nodemon server.js --trace-warnings`
web-container | npm ERR! spawn ENOENT
web-container | npm ERR!
web-container | npm ERR! Failed at the projectname@1.0.0 start script.
web-container | npm ERR! This is probably not a problem with npm. There is likely additional logging o                                   utput above.
web-container | npm WARN Local package.json exists, but node_modules missing, did you mean to install?
web-container |
web-container | npm ERR! A complete log of this run can be found in:
web-container | npm ERR!     /root/.npm/_logs/2019-12-23T18_42_42_900Z-debug.log

如果我从服务中删除卷字段,它会按预期顺利运行,但我无法开始进行热重加载。

最佳答案

您的问题只是nodemon不在您的可执行路径上。 npm install 不会为你做这个。

有很多方法可以解决这个问题,但最简单的就是在容器中全局安装nodemon:

RUN npm install -g nodemon --no-optional

关于node.js - 如何在docker中创建live-reload开发环境? (NodeJS、Redis 和 Vue),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59460202/

相关文章:

linux - 允许 DOCKER-USER 链中的某些 IP 用于入站流量,拒绝所有其余 IP

docker - 如何为 Docker Compose 配置 dns 条目

javascript - 在javascript中将数组转换为嵌套对象

mysql - Docker:无法远程访问mysql容器

python - Docker CLI允许使用标签,但是Docker Python API引发APIError

bash - 将函数输出保存到以参数命名的变量中

mysql - Docker mysql连接错误

node.js - 如何用node jsexpress响应xml?

node.js - FCM 提供推送通知的重复副本

javascript - Mongodb 聚合管道新日期