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

Nuxt3部署Docker后调用自身后端API报500错误解决方案

问题诊断

正如之前讨论提到的,这完全不是Nuxt框架相关的问题,报错和Nuxt配置、NGINX Proxy Manager都没有关系,是Docker网络隔离机制导致的服务端连接失败。
你看到的connect ECONNREFUSED 127.0.0.1:25错误,触发逻辑是:Nuxt服务端的Nodemailer默认尝试连接本地25端口发信,但容器内的127.0.0.1指向容器自身的回环网络,容器内部没有运行任何SMTP服务监听25端口,连接自然会被拒绝。
开发环境运行正常是因为本地启动服务时没有网络隔离,127.0.0.1直接指向你的开发机,能正常访问本机的SMTP服务;打包到Docker容器后网络被隔离,才出现这个问题。
另外你的Dockerfile里有一处笔误:RUN apkk add git多写了一个k,正确写法是RUN apk add git,不修正的话镜像构建阶段就会报错。

解决方案

按生产环境适用性从高到低排序:

  • 推荐方案:启动容器时追加启动参数--add-host=host.docker.internal:host-gateway,之后将Nodemailer配置中的SMTP连接地址从127.0.0.1改为host.docker.internal即可。这个配置会在容器内部添加一条域名映射,让host.docker.internal直接指向宿主机网关,不需要调整现有网络模式、也不会出现端口冲突,对现有部署架构影响最小。
  • 测试环境可选方案:启动容器时添加--network host参数,让容器直接共享宿主机的网络栈,此时容器内的127.0.0.1和宿主机的127.0.0.1完全指向同一网络空间,不需要修改Nodemailer配置即可正常连接。但这种方式会丢失Docker的网络隔离能力,生产环境不建议使用。
  • 低优先级方案:启动容器时添加端口映射参数-p 25:25,将宿主机25端口直接映射到容器25端口。这种方式灵活性最差,如果容器内部有其他程序占用25端口会直接出现冲突,仅适合临时调试使用。
排查提示

你不需要在Nuxt配置中额外添加baseURL相关配置:从报错信息可以看到/api/send接口已经被正常请求到了Nuxt服务端,500错误是服务端执行发信逻辑时产生的内部错误,和前端接口调用路径、外层反向代理配置都没有关系,后续遇到类似端口连接拒绝的错误,可以先核对容器内访问的IP是否指向了预期的目标服务。

内容的提问来源于stack exchange,提问作者Robin-Whg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:31:08