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

无法在Docker容器中运行Next.js应用的排查求助

Next.js App Router 应用Docker容器运行空响应问题

我正在学习Next.js,使用create-next-app搭建了一个简易应用,本地通过npm run dev可正常运行,现尝试配置使其在Docker容器中运行。

参考Vercel的多环境Docker示例,对Dockerfile仅做了两处修改:

  • 在npm run build命令前添加ENV NODE_TLS_REJECT_UNAUTHORIZED=0,因本地开发版本需从带自签名证书的本地API获取数据
  • 在runner阶段添加了几个额外的复制命令(不确定是否必要,也不清楚standalone目录是否包含应用所需的所有文件)

我还添加了一个next.config.js文件,内容如下以强制独立构建:

module.exports = {
    output: 'standalone',
}

运行生成的容器后,访问http://localhost:3001仅得到空响应。但进入容器shell查看,文件似乎符合我对Next.js的有限认知:

容器内文件截图

我注意到Vercel示例使用Pages路由,而我的应用使用App Router,但不确定这是否需要修改Dockerfile。

完整的Dockerfile内容:

FROM node:18-alpine AS base

# 1. 仅在需要时安装依赖
FROM base AS deps
RUN apk add --no-cache libc6-compat

WORKDIR /app

# 根据偏好的包管理器安装依赖
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
  if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
  elif [ -f package-lock.json ]; then npm ci; \
  elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i; \
  else echo "Lockfile not found." && exit 1; \
  fi

# 2. 仅在源码变更时重新构建
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
COPY .env.dev .env.production
ENV NODE_TLS_REJECT_UNAUTHORIZED=0
RUN npm run build

# 3. 生产镜像,复制所有文件并运行Next.js
FROM base AS runner
WORKDIR /app

ENV NODE_ENV=production

RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001

COPY --from=builder /app/public ./public
COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/.env ./.env
COPY --from=builder /app/.env.production ./.env.production

# 自动利用输出追踪减小镜像体积
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

USER nextjs

EXPOSE 3000

ENV PORT 3000

CMD HOSTNAME=localhost node server.js

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:57:03