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

Docker部署Vue+Spring+MySQL+Redis项目出现net::ERR_NAME_NOT_RESOLVED错误求助

Docker部署Vue+Spring+MySQL+Redis项目出现net::ERR_NAME_NOT_RESOLVED错误求助

看起来你遇到了前端无法解析后端Spring服务域名的问题,我来帮你梳理下实际部署中常见的原因和解决办法:

最核心的坑:浏览器无法识别Docker内部服务名

你在Vue容器里配置的VITE_API_URL: http://spring:8088/,其中spring是Docker自定义网络(app-network)内的服务别名,只有同网络下的容器能识别这个名称。但用户是通过浏览器访问前端的,浏览器会用自己的公共DNS去解析spring,自然找不到对应的IP,这就是net::ERR_NAME_NOT_RESOLVED的根源。

两种场景的解决办法

场景1:快速调试(允许Spring暴露到公网)

  1. 给Spring服务添加宿主机端口映射,修改docker-compose.yml的Spring部分:
spring:
  container_name: spring
  image: backimage
  ports:
    - '8088:8088'  # 把容器8088端口映射到宿主机
  networks:
    - app-network
  restart: always
  1. 修改Vue的环境变量,换成Oracle Cloud服务器的公网IP:
vue:
  container_name: front
  image: frontimage
  environment:
    VITE_API_URL: http://你的服务器公网IP:8088/  # 替换成实际公网IP
  ports:
    - '80:80'
    - '443:443'
  restart: always
  networks:
    - app-network
  1. 重启服务生效:docker-compose down && docker-compose up -d

场景2:生产环境推荐(不暴露Spring到公网)

通过Vue容器内的Nginx反向代理转发请求,让Nginx在Docker内部解析spring服务名,更安全:

  1. 无需修改Spring的端口配置(保持内部访问即可)
  2. 修改Vue项目的Nginx配置(如果用Nginx镜像部署),添加反向代理规则:
location /api {
    proxy_pass http://spring:8088/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
  1. 调整Vue的环境变量,用相对路径作为API前缀:
vue:
  container_name: front
  image: frontimage
  environment:
    VITE_API_URL: '/api'
  ports:
    - '80:80'
    - '443:443'
  restart: always
  networks:
    - app-network
  1. 重新构建Vue镜像并重启服务。

额外排查点(如果以上方法无效)

  • 检查服务状态:执行docker-compose ps,确保spring、vue等服务状态都是Up
  • 测试内部网络连通性:进入Vue容器执行docker exec -it front ping spring,如果ping不通,尝试重建网络:docker network rm app-network && docker-compose up -d
  • 确认Spring端口监听:进入Spring容器执行netstat -tulpn | grep 8088,或查看日志docker-compose logs spring,排查是否有端口绑定失败的错误

备注:内容来源于stack exchange,提问作者Jin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:04:31