Docker Compose挂载绑定失效,本地代码修改不生效求助
问题:Docker挂载本地代码后无法实时同步Node.js项目修改
我是Docker新手,正在练习搭建Node.js前端项目,已配置Express和nodemon,本地运行时代码修改后可实时刷新生效。但执行docker run -v ./src:/src/app/ -p 8080:8080 davihlav/frontend:v1命令,或使用如下配置通过Docker Compose运行后,修改本地代码无法同步到容器中,请问哪里配置出错了?
Dockerfile
FROM node:18.12.1-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY ./src ./src EXPOSE 8080 CMD ["npm", "run", "dev"]
package.json脚本
"scripts": { "start": "node src/index.js", "dev": "nodemon --watch \"./**\" --ext \"js\" --exec \"node src/index.js\"" },
docker-compose.yml
version: '3' services: frontend: image: davihlav/frontend:v1 build: ./frontend ports: - "8080:8080" volumes: - ./frontend/src:/app/src
错误分析与修复方案
1. Docker Run命令挂载路径错误
Dockerfile中设置的工作目录是/app,容器内项目代码实际存放在/app/src,但你执行的docker run命令把本地./src挂载到了容器的/src/app/目录,路径完全不匹配,导致本地修改无法同步到项目运行目录。
正确命令:
docker run -v ./src:/app/src -p 8080:8080 davihlav/frontend:v1
2. Nodemon容器内监听机制失效
Alpine镜像的文件系统特性会导致nodemon默认的文件监听机制无法触发,需要改用轮询模式监听文件变化。修改package.json的dev脚本,添加--legacy-watch参数:
"scripts": { "start": "node src/index.js", "dev": "nodemon --legacy-watch --watch \"./**\" --ext \"js\" --exec \"node src/index.js\"" },
3. Docker Compose挂载路径需匹配本地目录结构
你的docker-compose.yml配置的挂载路径是./frontend/src:/app/src,需要确保docker-compose.yml文件所在的当前目录下,确实存在frontend/src文件夹。如果你的src目录和docker-compose.yml同级,应修改为:
volumes: - ./src:/app/src
另外,使用Docker Compose时,建议先执行docker-compose build重新构建镜像(确保依赖安装完整),再用docker-compose up启动服务,避免镜像缓存导致的异常。
内容的提问来源于stack exchange,提问作者DaviHlav
相关产品推荐
相关产品推荐

