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

TurboRepo+Next.js+Docker中NEXT_PUBLIC构建变量无法正确读取

Next.js + TurboRepo + Docker Compose 环境变量读取问题

通过Docker Compose传递构建变量时,Next.js客户端脚本无法正确读取process.env.NEXT_PUBLIC_API_URL。Docker环境中打印process.env显示变量配置正确,但客户端获取的值不对。生产环境不想使用.env文件(已通过.dockerignore忽略),希望直接将变量注入process.env。

客户端变量调用方式

process.env.NEXT_PUBLIC_API_URL

Docker Compose 配置

services:
  web:
    build:
      context: .
      dockerfile: ./apps/web/Dockerfile
    restart: always
    environment:
      - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
      ...

Next.js 项目 Dockerfile

FROM node:22-alpine AS base

FROM base AS builder
# 安装libc6-compat以适配部分依赖
RUN apk update
RUN apk add --no-cache libc6-compat
WORKDIR /app
RUN npm install -g turbo
COPY . .
RUN turbo prune web --docker

FROM base AS installer
RUN apk update
RUN apk add --no-cache libc6-compat
WORKDIR /app

# 先安装依赖(依赖变更频率低)
COPY --from=builder /app/out/json/ .
RUN npm install

# 构建项目
COPY --from=builder /app/out/full/ .
RUN npx turbo run build

FROM base AS runner
WORKDIR /app

# 非root用户运行生产环境
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
USER nextjs

# 利用输出追踪减小镜像体积
COPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/standalone ./
COPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/static ./apps/web/.next/static
COPY --from=installer --chown=nextjs:nodejs /app/apps/web/public ./apps/web/public

CMD node apps/web/server.js

根目录 turbo.json 配置

{
  "$schema": "https://turbo.build/schema.json",
  "tasks": {
    "build": {
      "inputs": ["$TURBO_DEFAULT$", ".env*"],
      "outputs": ["dist/**", ".next/**", "!.next/cache/**", "public/dist/**"],
      "dependsOn": ["^build"]
    },
    ...
  }
}

已尝试的解决方案

  • 在不使用TurboRepo和Docker Compose的独立环境中运行Web项目,变量能被正确读取
  • 在Dockerfile中通过ARG传递NEXT_PUBLIC_API_URL
  • 按照TurboRepo文档在turbo.json的globalEnv、build env和web#build中配置NEXT_PUBLIC_API_URL
  • 按照Next.js文档在next.config.ts中配置NEXT_PUBLIC_API_URL
  • 使用turbo run build --env-mode=loose命令执行构建
  • 在Web项目中创建新的turbo.json,继承根配置并设置环境变量

问题现状

Docker Compose中的环境变量已正确设置,但Next.js客户端仍无法获取正确值,变量呈现静态状态无法修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:39:56