docker compose up找不到package.json,但docker run运行正常的问题排查
Docker Compose启动时找不到package.json的原因分析
核心问题:本地卷挂载覆盖容器内置文件,启动时文件未就绪
- 单独使用
docker run运行镜像时,容器内/app目录的内容是镜像构建阶段通过COPY指令复制进去的完整文件集合(包含package.json),没有本地卷覆盖,因此npm可以正常读取文件。 - 而执行
docker compose up时,你配置的volumes: - ./api:/app会在容器启动过程中,将本地项目根目录下的api文件夹挂载到容器内的/app目录,完全替换镜像中原本的/app内容。 - 当容器启动速度快于本地文件系统的同步速度(比如存在文件缓存、跨设备挂载延迟),容器内
/app目录在执行npm run dev时还未同步到package.json,就会触发ENOENT错误。
快速验证方法
修改docker-compose.yaml中的CMD为["sleep", "3600"],启动容器后进入容器查看/app目录:
docker exec -it api_c ls /app
如果此时能看到package.json,则可以确认是启动时文件同步延迟导致的问题;如果仍然看不到,需要检查本地api目录的路径是否正确(从项目根目录执行的话,./api路径是正确的)。
内容的提问来源于stack exchange,提问作者Md. A. A. Apu
相关产品推荐
相关产品推荐

