Next.js 内置 i18n 路由在 Docker 容器中运行时切换语言返回404
问题根因与修复方案
最高概率的配置遗漏:next.config.js 未打包进镜像
你当前的Dockerfile仅复制了.next、public、node_modules、package.json,没有把存储i18n路由配置的next.config.js文件放进镜像。next start启动时会从当前运行目录读取next.config.js加载所有自定义路由规则,包括i18n配置里的支持语言列表、默认语言、路径前缀映射逻辑。缺失这个文件时,Next.js服务完全无法识别带语言前缀的路由(比如/zh-CN/xxx、/en-US/xxx),自然会返回404。
修正后的Dockerfile
FROM mhart/alpine-node WORKDIR /app # 新增这一行,将 next.config.js 复制到镜像内 COPY ./next.config.js /app/next.config.js COPY ./.next /app/.next COPY ./public /app/public COPY ./node_modules /app/node_modules COPY ./package.json /app/package.json CMD ["npm", "run", "start"]
其他需要排查的场景
如果补充文件后问题仍存在,按优先级检查以下项:
- 集群前置反向代理(Nginx、Traefik等)的规则:确认没有对带locale前缀的路径做不必要的重写、裁剪,请求会被完整透传给Next.js服务
- 确认构建
.next产物时的Node版本和Docker镜像内的Node版本一致,避免next start加载产物时出现兼容问题 - 确认
next.config.js中没有配置仅适配本地环境的basePath、assetPrefix等字段,这类字段和Swarm部署的域名路径不匹配时,也会导致路由失效
内容的提问来源于stack exchange,提问作者dna
相关产品推荐
相关产品推荐

