You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-Compose部署Strapi+PostgreSQL时出现package.json读取错误

解决Docker搭建Strapi连接PostgreSQL时package.json找不到的问题

错误原因

Could not read package.json: Error: ENOENT: no such file or directory, open '/usr/src/app/package.json'的核心问题是:你在docker-compose.yml中把本地./strapi-app目录挂载到了容器的/usr/src/app工作目录,而本地strapi-app目录内没有package.json文件,直接覆盖了容器构建阶段生成的项目文件,导致启动时找不到依赖配置文件。


解决方案

方案一:调整挂载策略(推荐)

不需要挂载整个应用目录,只挂载Strapi需要持久化的核心目录(配置、媒体文件、数据),保留容器内构建好的项目文件:
修改docker-compose.yml中strapi服务的volumes部分:

volumes:
  - ./strapi-app/config:/usr/src/app/config
  - ./strapi-app/public:/usr/src/app/public
  - ./strapi-app/data:/usr/src/app/data
  - /usr/src/app/node_modules

方案二:确保本地strapi-app目录包含package.json

如果坚持要挂载整个应用目录,先在本地初始化Strapi项目生成配置文件:

  1. 全局安装Strapi:npm install strapi@latest -g
  2. 在当前目录创建Strapi项目:strapi new strapi-app --dbclient=postgres
  3. 重新执行docker-compose up -d

方案三:修改Dockerfile适配挂载场景(不推荐,启动速度慢)

把依赖安装和构建步骤放到容器启动阶段执行,同时确保本地strapi-app目录存在package.json和package-lock.json:
修改Dockerfile:

FROM node:18-alpine

WORKDIR /usr/src/app

COPY package*.json* ./

CMD [ "sh", "-c", "npm install && npm run build && npm start" ]

额外注意事项

  • 修改配置后,清理旧容器和镜像避免缓存问题:docker-compose down -v && docker-compose build --no-cache
  • depends_on仅保证PostgreSQL容器先启动,不保证数据库服务完全就绪,建议添加健康检查脚本确保数据库可用后再启动Strapi。

内容的提问来源于stack exchange,提问作者pedroremedios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 13:55:01