Prisma Schema无法识别Docker Compose传递的环境变量怎么办?
解决Prisma无法识别Docker Compose传递的环境变量问题
确保Prisma CLI在容器运行时执行
Prisma CLI(如prisma generate、prisma migrate)在镜像构建阶段执行时,无法获取Docker Compose传递的环境变量(构建与运行阶段相互独立)。需将Prisma命令移至容器启动脚本中,示例Dockerfile修改如下:WORKDIR /app COPY package*.json ./ RUN npm install COPY . . # 启动容器时先执行Prisma生成操作,再启动服务 CMD ["sh", "-c", "npx prisma generate && npm start"]正确传递环境变量到容器
可通过两种方式确保变量传递有效:
方式一:直接在Docker Compose中定义变量值app: build: context: ./app environment: - DATABASE_URL=postgresql://user:password@db:5432/mydb?schema=public方式二:通过外部.env文件传递变量
app: build: context: ./app env_file: - ./config/app.env # 指定你的环境变量文件路径 environment: - DATABASE_URL=${DATABASE_URL}验证环境变量是否生效
可在容器启动命令中添加调试步骤,确认变量是否成功传递:app: build: context: ./app environment: - DATABASE_URL=${DATABASE_URL} command: ["sh", "-c", "echo $DATABASE_URL && npx prisma generate && npm start"]查看容器日志,若能打印出正确的
DATABASE_URL,则说明变量已传递,Prisma可正常读取。开发环境终端变量检查
本地开发时,Prisma CLI会读取终端的环境变量(并非仅根目录的.env文件)。若终端未设置DATABASE_URL,即使Node进程能获取到,Prisma CLI命令仍会失败。可在终端执行export DATABASE_URL=xxx临时设置,或把变量添加到终端配置文件(如~/.bashrc、~/.zshrc)中持久生效。
内容的提问来源于stack exchange,提问作者Charklewis
相关产品推荐
相关产品推荐

