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
相关产品推荐
相关产品推荐

