You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化Node-Typescript API容器热重载失效问题求助

解决Docker化API热重载失效问题

问题根源

你当前用命名卷挂载apibuild到容器内的/app/api/build,但命名卷是用来持久化容器数据的,不会同步本地代码变更;而且启动命令用的是yarn start,这一般是生产环境的启动指令,本身不带热重载能力。

修复步骤

1. 修改docker-compose.yml,替换为本地代码绑定挂载

把原来的命名卷改成绑定本地API代码目录到容器工作目录,同时排除node_modules避免依赖冲突:

version: "3.8"
services:
  api:
    image: xinxo-api:latest
    build: ./api
    ports:
      - "5005:5005"
    networks:
      - xinxo-network
    volumes:
      # 绑定本地api目录到容器工作目录,实时同步代码变更
      - ./api:/app/api/build
      # 排除node_modules,用容器内安装的依赖
      - /app/api/build/node_modules
    depends_on:
      - db
      - redis
    env_file:
      - ./api/.env
    restart: always
networks:
  xinxo-network:
    driver: bridge
volumes:
  pgdata:
  cache:
  staticbuild:
  # 移除没用的apibuild命名卷

2. 调整Dockerfile适配开发环境

确保安装开发依赖,并用支持热重载的命令启动服务:

FROM node:16-bullseye-slim

WORKDIR /app/api/build

COPY package*.json ./
COPY yarn.lock ./
COPY tsconfig.json ./
COPY ./prisma prisma

# 安装所有依赖(包含开发依赖)
RUN yarn install

RUN yarn prisma generate

# 无需COPY本地代码,绑定挂载已经同步了
EXPOSE 5005
# 替换成package.json里的开发热重载启动命令,比如yarn dev
CMD ["yarn", "dev"]

3. 确认package.json的开发脚本

从截图来看,你需要确保package.json里有带热重载的开发脚本。如果没有,先安装对应的开发依赖(比如nodemon或ts-node-dev):

# 本地安装后同步到容器,或者在Dockerfile里执行RUN yarn add -D nodemon ts-node-dev
yarn add -D nodemon ts-node-dev

然后在package.json中添加脚本:

"scripts": {
  "dev": "nodemon src/index.ts",
  "start": "node build/index.js"
}

最后验证

修改完配置后,重新构建启动容器:

docker-compose down
docker-compose up --build

此时修改本地代码,容器内的服务应该会自动重启实现热重载。

内容的提问来源于stack exchange,提问作者tungdayhehe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:10:29