📝 如何用 Docker 部署 Next.js 应用?(附避坑指南)
从零开始,一步步教你用 Docker 部署 Next.js 15 应用,解决国内网络、依赖冲突、空响应等常见问题。
🎯 适用场景
- 本地开发完成,想容器化部署
- 使用 Next.js 15 + React 19
- 国内环境,拉取镜像慢(最大的问题)
- 遇到
npm依赖冲突或ERR_EMPTY_RESPONSE
首先你要确保你自己的项目能正常运行,以及你的Docker Desktop win版已经下载并安装好了,记得WSL -update更新。
✅ 第一步:准备 Dockerfile
先粘贴我的package.json
{
"name": "next-app",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
...
"next": "15.0.3",
"react": "^19.1.1",
"react-dom": "^19.1.1",
...
},
}
因为我比较擅长用yarn,所以使用yarn
如果是npm的话,就删除图中标注的***的语句。
根据package.json对照,在项目根目录创建 Dockerfile:
# 使用 Node.js 18 Alpine 镜像(自带 Yarn)
FROM node:18-alpine
WORKDIR /app
# 复制 package.json 和 yarn.lock
COPY package*.json ./
***COPY yarn.lock ./
# 配置淘宝镜像源(可选)
***RUN yarn config set registry https://registry.npmmirror.com
# 安装依赖
***RUN yarn install
如果是npm则直接 RUN npm install
# 复制源码
COPY . .
# 构建项目
***RUN yarn build
RUN npm build
EXPOSE 3000
# 启动应用
***CMD ["yarn", "dev"]
CMD ["npm", "dev"]
💡 如果你用
npm,把yarn install换成npm install
✅ 第三步:配置镜像加速(国内必备)
-
访问 阿里云容器镜像服务
-
获取你的专属加速地址
-
在 Docker Desktop 中配置:
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
这能让你秒速拉取
node:18-alpine镜像!
✅ 第四步:构建镜像
docker build -t my-nextjs-app .
✅ 第五步:运行容器
docker run -d -p 3000:3000 --name my-nextjs-container my-nextjs-app
✅ 第六步:访问应用
打开浏览器:
http://localhost:3000
🎉 成功!
🚨 常见问题 & 解决方案
| 问题 | 原因 | 解决 |
|---|---|---|
pull access denied | 国内无法访问 Docker Hub | 配置阿里云镜像加速 |
ERESOLVE 依赖冲突 | framer-motion 与 React 19 版本冲突 | 加 --legacy-peer-deps |
ERR_EMPTY_RESPONSE | Next.js 默认监听 localhost | 加 -H 0.0.0.0 |
yarn.lock 不存在 | 未生成锁文件 | 先本地运行 yarn install |
🎁 小贴士
- ✅ 使用
.dockerignore忽略node_modules、.git等 - ✅ 多阶段构建可进一步减小镜像体积
- ✅ 可推送到阿里云容器镜像服务,用于生产部署
这样访问对应的端口号就能访问到了