Docker Ubuntu环境下Nodemon的--legacy-watch参数无效如何解决?
根本原因
你运行容器时使用的是镜像构建阶段通过COPY . .写入的静态源码副本,你在宿主机修改的本地代码没有同步到运行中的容器内部,因此Nodemon即使开启了监听也感知不到文件变化,只能重新构建镜像更新容器内的文件。
解决步骤
- 运行容器时添加卷挂载参数,将宿主机的源码目录映射到容器内的工作目录,参考运行命令:
# 将命令中本地源码路径替换为你自己的宿主机代码存放路径 docker run -p 8080:8080 -v /path/to/your/local/code:/usr/src/app <你的镜像名称>
- 如果你使用docker-compose管理容器,直接在配置中添加volumes字段即可,示例配置:
version: '3' services: web: build: . ports: - "8080:8080" volumes: # 映射本地源码到容器工作目录 - ./:/usr/src/app # 可选添加匿名卷,避免挂载时覆盖容器内安装的node_modules依赖 - /usr/src/app/node_modules
- 挂载完成后重启容器即可生效,你已经添加的
--legacy-watch参数已经适配了容器内的文件监听场景,无需额外修改Dockerfile。 - 若挂载后仍未触发自动重载,可调整Nodemon启动参数明确指定监听的文件后缀,修改Dockerfile的CMD行:
CMD [ "nodemon", "--legacy-watch", "-e", "js,json", "server.js" ]
注意:该配置仅适用于本地开发场景,生产环境请勿使用卷挂载和Nodemon,需打包固定版本的源码后直接用node命令启动服务。
内容的提问来源于stack exchange,提问作者Modig
相关产品推荐
相关产品推荐

