Docker Compose部署多服务报错:无法找到pnpm-lock.yaml文件
解决Docker Compose构建时找不到pnpm-lock.yaml的问题
错误原因
构建报错"/pnpm-lock.yaml": not found,核心问题是你把每个服务的build.context设置成了服务目录下的docker子文件夹,但pnpm-lock.yaml实际存放在服务根目录(比如ticket-outlet-backend-api),Docker在docker子目录下找不到该文件,导致校验失败。
解决方案
1. 调整Build上下文与Dockerfile路径
修改每个服务的build配置:
- 将
context指向服务根目录(比如./ticket-outlet-backend-api) - 通过
dockerfile参数指定docker子目录里的Dockerfile位置(比如docker/Dockerfile)
2. 确保pnpm-lock.yaml存在
进入每个服务的根目录,执行pnpm install命令生成pnpm-lock.yaml文件(如果当前目录还没有的话)。
3. 修正后的docker-compose.yml
version: '3.8' name: 'ticket-snapper' services: backend_api: build: context: ./ticket-outlet-backend-api dockerfile: docker/Dockerfile ports: - "3000:3000" volumes: - ./ticket-outlet-backend-api:/app environment: - NODE_ENV=development networks: - ticket-outlet-network web_portal_user: build: context: ./ticket-outlet-web-portal dockerfile: docker/Dockerfile ports: - "3001:3001" volumes: - ./ticket-outlet-web-portal:/app environment: - NODE_ENV=development networks: - ticket-outlet-network web_portal_admin: build: context: ./ticket-outlet-admin-portal-v1 dockerfile: docker/Dockerfile ports: - "3002:3002" volumes: - ./ticket-outlet-admin-portal-v1:/app environment: - NODE_ENV=development networks: - ticket-outlet-network networks: ticket-outlet-network: driver: bridge
额外说明
如果你的Dockerfile原本就放在服务根目录,直接把build.context设为服务根目录即可,无需指定dockerfile参数。
内容的提问来源于stack exchange,提问作者Pratik Gupta
相关产品推荐
相关产品推荐

