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

SSR Next.js React应用Docker部署异常:无法访问容器服务

问题排查与修复方案

核心问题1:端口映射不匹配

你的Dockerfile production阶段明确设置了ENV PORT=3001且EXPOSE 3001,说明容器内的Next.js服务运行在3001端口,但docker-compose里的端口映射写成了"3001:80"——主机3001端口映射到容器80端口,而容器80端口无服务监听,直接导致无法访问。

修复方法:修改docker-compose的ports配置:

ports:
  - "3001:3001"

核心问题2:Production阶段配置冗余且不合理

  1. 你已定义builder构建阶段,但production阶段未复用其产物,反而重新执行COPY . .和npm run build,既浪费构建时间,还可能引入不必要的本地文件。
  2. production环境挂载本地目录的volumes完全没必要,这会覆盖镜像内的生产代码与构建产物,破坏镜像一致性,甚至可能因本地未执行build导致容器内无运行产物。

修复Dockerfile(production阶段):

FROM node:18-alpine AS production
WORKDIR /app

ENV NODE_ENV=production
ENV NEXT_PUBLIC_APP_ENV=production
ENV PORT=3001

# 仅复制生产依赖
COPY package*.json ./
RUN npm ci --only=production

# 复用builder阶段的构建产物
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json

EXPOSE 3001
USER node

CMD [ "npm", "start" ]

修复docker-compose(移除不必要的volumes):

version: '3.8'
services:
  app:
    image: nextjs_zaahib
    build:
      context: ./
      target: production
      dockerfile: Dockerfile
    ports:
      - "3001:3001"

验证步骤

  1. 停止并清理现有容器:docker compose down
  2. 重新构建镜像并启动服务:docker compose up -d --build
  3. 查看容器日志确认启动状态:docker compose logs app,若出现类似ready - started server on 0.0.0.0:3001, url: http://localhost:3001的日志,说明服务正常运行
  4. 访问http://localhost:3001即可打开应用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:26:18