Docker Compose Watch能否在Windows的WSL Ubuntu上运行?遇npm未找到错误
问题原因
你的web服务使用的是多阶段构建后的nginx镜像,而nginx镜像中没有安装Node.js和npm,所以执行npm start时会提示npm: not found。虽然Dockerfile第一阶段用了node:16.13.1-slim,但多阶段构建的最终产物是第二阶段的nginx镜像,默认构建时会使用最后一个阶段的镜像。
解决方案
修改docker-compose.yml中web服务的构建配置,指定使用Dockerfile中的react-build阶段(即包含Node.js环境的镜像),具体步骤如下:
- 更新
web服务的build配置,添加target: react-build参数,同时传递必要的构建参数:
web: build: context: ./react-nginx target: react-build # 指定使用第一阶段的node镜像 args: REACT_APP_HOST_IP: localhost REACT_APP_HOST_PORT: ***** # 替换为你的实际端口 command: npm start develop: watch: - action: sync path: ./react-nginx/src target: /app/src ignore: - node_modules/ - action: rebuild path: ./react-nginx/package.json ports: - "3000:3000" # 添加端口映射,方便访问React开发服务器
- 重新启动Docker Compose Watch:
docker compose watch
补充说明
target: react-build会让Docker构建时停留在第一阶段的镜像,这个镜像基于node:16.13.1-slim,包含完整的Node.js和npm环境,能够正常执行npm start。- 当
package.json变化时,action: rebuild会重新构建react-build阶段,自动执行npm install更新依赖。 - 同步
src目录到容器的/app/src,React开发服务器会自动检测代码变化并热重载。
内容的提问来源于stack exchange,提问作者Christopher
相关产品推荐
相关产品推荐

