Express Docker容器本地运行正常 云部署报错找不到/src/package.json
问题定位
核心问题出在你docker-compose配置里的开发环境专属volumes挂载,在生产部署场景下导致了路径覆盖问题:
- 你的部署流程里只把打包好的镜像推送到了Docker Hub,并没有把Express源码上传到云主机的执行目录
- 你Dockerfile构建的镜像里本来已经把
package.json和所有源码放到了/src路径下,单独运行镜像正常也能证明这一点 - docker-compose里保留了本地开发用的volumes配置:
- 如果你实际配置是把当前目录挂载到了
/src(大概率是配置笔误),云主机空的执行目录会直接覆盖容器内的/src路径,镜像里原有的package.json就会被清空,自然npm找不到文件 - 就算你挂载的是到
/src/app,这个配置在生产环境也完全多余,不会用到还可能引发相对路径引用错误
- 如果你实际配置是把当前目录挂载到了
解决方案
直接删除docker-compose中express服务的volumes配置段即可,你打包好的镜像已经包含了所有运行需要的代码、依赖,不需要挂载宿主机的任何文件。
调整后的express服务配置参考:
express: container_name: express_server networks: - client - server image: "bork/server:latest" command: npm run start ports: - 3000:3000 env_file: - config/.env.express
额外注意事项
你Dockerfile里默认启动命令是npm run startdev,docker-compose里覆盖成了npm run start,请确认你的package.json的scripts配置中存在start命令,避免后续启动报错。
内容的提问来源于stack exchange,提问作者Cameron Davis
相关产品推荐
相关产品推荐

