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

启用SSR的Nuxt3容器无法读取docker-compose环境变量

Nuxt3 SSR Docker容器化环境变量读取问题解决方案

以下是你可能遗漏的关键配置点:

  • 确保runtimeConfig动态读取环境变量
    不要在nuxt.config.ts中硬编码public字段的默认值,要优先读取环境变量,再fallback到默认值:

    export default defineNuxtConfig({
      runtimeConfig: {
        public: {
          apiBase: process.env.NUXT_PUBLIC_API_BASE || 'http://localhost:1337'
        }
      }
    })
    

    注意:SSR模式下,nuxt.config中必须用process.env,不能用客户端专用的import.meta.env。

  • 避免构建镜像时注入环境变量
    如果Dockerfile里设置了ENV NUXT_PUBLIC_*指令,Nuxt会在构建时把这些值固化到客户端bundle中,导致运行时的环境变量无法覆盖。删除构建阶段的环境变量设置,保持镜像纯净,只在docker-compose运行时注入变量。

  • 组件中正确读取runtimeConfig
    在组件或页面中,必须通过useRuntimeConfig()来访问public变量,不能直接读取process.env:

    <script setup>
    const config = useRuntimeConfig()
    // 使用配置项
    const apiUrl = config.public.apiBase
    </script>
    

    直接访问process.env在客户端环境中不会读取运行时变量,因为客户端bundle在构建后已固化。

  • 确认容器启动命令为生产模式
    Dockerfile的启动命令必须是nuxt start或直接启动编译后的服务文件,不能用nuxt dev或nuxt build:

    # 正确的启动命令二选一
    CMD ["npx", "nuxt", "start"]
    # 或者直接启动编译后的服务(推荐,更高效)
    CMD ["node", ".output/server/index.mjs"]
    

    nuxt start会启动生产SSR服务,并且会加载运行时环境变量;而构建命令会固化变量。

  • 检查nitro环境变量前缀配置
    确认nuxt.config.ts中的nitro配置没有修改默认的环境变量前缀:

    export default defineNuxtConfig({
      nitro: {
        envPrefix: 'NUXT_' // 保持默认值,不要修改
      }
    })
    

    这个配置控制nitro引擎读取哪些前缀的环境变量,默认的NUXT_会包含NUXT_PUBLIC_前缀的变量。

  • 验证docker-compose变量传递正确性
    确保docker-compose.yml中的环境变量拼写正确,前缀为NUXT_PUBLIC_,比如:

    services:
      nuxt-app:
        image: your-nuxt-image
        environment:
          - NUXT_PUBLIC_API_BASE=http://your-production-api:1337
        # 或者使用env_file批量加载
        # env_file:
        #   - ./env/production.env
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:10:30