【问题标题】:How do I create a live-reload development environment in docker? (NodeJS, Redis & Vue)如何在 docker 中创建实时重载开发环境? (NodeJS、Redis 和 Vue)
【发布时间】:2020-04-15 00:43:58
【问题描述】:

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

我设法让项目运行起来,但我正在努力解决的最后一个问题是热重载。我已将 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

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

【问题讨论】:

  • 如果删除卷,nodemon 会启动吗?我很惊讶。似乎 nodemon 根本不在你的路径上:sh: 1: nodemon: not found.
  • 能否直接在宿主机上运行Node,指向Docker中的一个Redis实例?这将使您获得将 Docker 用于一次性本地数据库的好处,但避免了尝试将其用于实时开发环境的困难。

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


【解决方案1】:

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

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

RUN npm install -g nodemon --no-optional

【讨论】:

  • 好的,现在添加它会导致以下错误:“找不到模块粘性会话”发生这种情况我没有在 package.json 中安装软件包。为什么会这样。我已经在 Dockerfile 中指定了运行 npm install。
  • 当您点击 npm install strophe 时,您的 docker 文件会说什么?你的 package.json 中有粘性会话吗? bash 进入容器以查看发生了什么。
  • 稍等,让我看看。
  • 我已经设法让一切运行起来。 Nodemon 也在运行,但在我进行更改时不会重新加载。
猜你喜欢
  • 1970-01-01
  • 2020-03-25
  • 2022-09-25
  • 1970-01-01
  • 2018-04-07
  • 2011-02-27
  • 2023-03-10
  • 2014-02-01
  • 1970-01-01
相关资源
最近更新 更多