【问题标题】:Hot Reloading with Docker-compose in NodeJs在 NodeJs 中使用 Docker-compose 进行热重载
【发布时间】:2021-06-17 04:22:13
【问题描述】:

我在 Docker-compose + Nodejs 上看到了很多代码库,但它们都不够简单或基本,无法理解来自 docker-compose 的命令流。我创建了一个非常基本的 nodejs 应用程序,我打算使用容器启用热重载。

我的 package.json 看起来像:

{
"name": "docker_web_app",
"version": "1.0.0",
"description": "Node.js on Docker",
"author": "First Last <first.last@example.com>",
"main": "server.js",
"scripts": {
    "start": "node server.js",
    "watch": "nodemon"
},
"dependencies": {
    "express": "^4.16.1",
    "nodemon": "^2.0.7"
}
}

Dockerfile 看起来像:

FROM node:14 as base

WORKDIR /home/node/app

COPY package*.json ./

RUN npm install -g nodemon && npm install

# Bundle app source
COPY . .

EXPOSE 4000
# RUN npm run start
CMD [ "npm", "start" ]

FROM node:14 as dev

WORKDIR /home/node/app

EXPOSE 4000

CMD ["npm", "watch"]

docker-compose.yml 文件如下所示:

version: '3.7'
services:
  ts-node-docker:
    build:
      context: .
      dockerfile: Dockerfile
      target: base
    volumes:
      - ./:/home/node/app/
    container_name: ts-node-docker
    expose:
      - '4000'
    ports:
      - '4000:4000'
    command: npm run watch

我应该做哪些更改才能在此代码库中启用热重载?谢谢!

【问题讨论】:

  • 可以在主机上安装Node吗?这通常很容易安装,您甚至可能已经为其他项目安装了它。然后你可以直接运行npm run watch,而不需要解决 Docker 的隔离特性。

标签: node.js docker docker-compose


【解决方案1】:

考虑到您仅将其用于开发。

你不应该使用音量

volumes:
      - ./:/home/node/app/

COPY来源

# Bundle app source
COPY . .

一起。

只需将您的 Dockerfile 更改为

FROM node:14 as dev

WORKDIR /home/node/app

EXPOSE 4000

CMD ["npm", "watch"]

并修改package.json

"scripts": {
    "watch": "nodemon src/index.js'"
  },

【讨论】:

  • 点击docker-compose build 后跟docker-compose up 时出错。 Attaching to sample_ts-node-docker_1 ts-node-docker_1 | ts-node-docker_1 | Usage: npm &lt;command&gt; ts-node-docker_1 | where &lt;command&gt; is one of: ts-node-docker_1 | access, adduser, audit, bin, bugs, c, cache, ci, cit, ts-node-docker_1 | clean-install, clean-install-test, completion, config, ts-node-docker_1 | create, ddp, dedupe, deprecate, dist-tag, docs, doctor, 修改后我使用正确的命令执行吗?
  • 您仍然使用第一个 Dockerfile。尝试使用我提供的一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
相关资源
最近更新 更多