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项目生成配置文件:
- 全局安装Strapi:
npm install strapi@latest -g - 在当前目录创建Strapi项目:
strapi new strapi-app --dbclient=postgres - 重新执行
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
相关产品推荐
相关产品推荐

