Dec 4, 2025
FirtDemo
下面给你一份从零到可运行的完整指南,教你如何把 Next.js 应用部署到你自有的 Docker 环境中。步骤覆盖本地构建镜像、Dockerfile 编写、docker-compose 部署、环境变量管理、反向代理等常见需求。你可以直接复制使用。
✅ 部署流程总览
- 准备 Next.js 项目目录
- 编写 Dockerfile
- 构建生产镜像
- 用 Docker 或 Docker Compose 启动容器
- (可选) 配置 Nginx 反向代理 / HTTPS
下面详细展开。
📌 1. Next.js 生产部署的 Dockerfile
请在项目根目录创建:
Dockerfile
# 1. 使用官方 Node LTS 镜像
FROM node:18-alpine AS builder
# 2. 设置工作目录
WORKDIR /app
# 3. 复制文件
COPY package*.json ./
COPY . .
# 4. 安装依赖并构建
RUN npm install --frozen-lockfile && npm run build
# 5. 生产运行环境
FROM node:18-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
# 只复制产物
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["npm", "start"]⚠️ 如果你使用的是 Next.js 13+ App Router
也完全支持,无需调整。
📌 2. 构建 Docker 镜像
在项目根目录运行:
docker build -t my-next-app .📌 3. 运行 Docker 容器
docker run -d -p 3000:3000 --name nextjs my-next-app访问:
http://<你的服务器IP>:3000即可看到 Next.js。
📌 4. 使用 docker-compose(推荐)
创建文件:docker-compose.yml
version: '3'
services:
nextjs:
build: .
container_name: nextjs
ports:
- "3000:3000"
environment:
- NODE_ENV=production然后运行:
docker compose up -d --build📌 5. 使用 Nginx 反向代理(生产环境强烈建议)
nginx.conf 示例
server {
listen 80;
server_name genued.com;
location / {
proxy_pass http://nextjs:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
}并在 compose 中加入 nginx:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- nextjs📌 6. 如何处理环境变量
创建 .env.production:
NEXT_PUBLIC_API_URL=https://api.xxx.com在构建镜像时自动注入。
📌 7. 常见问题
❓为什么我修改代码后容器不更新?
因为 Docker 镜像只打包构建产物,需要重新 build:
docker compose up -d --build❓如何大幅减小镜像大小?
改成:
FROM node:18-slim或使用 Turbopack / standalone 模式:
next build --standalone如果你告诉我:
- 你当前 Next.js 版本
- 是否需要 HTTPS
- 是否使用 App Router 或 Pages Router
- 是否已有 Docker 服务器架构(例如 Ubuntu + docker compose)
我可以帮你直接生成 可运行的完整部署模板。