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暴露到公网)
- 给Spring服务添加宿主机端口映射,修改
docker-compose.yml的Spring部分:
spring: container_name: spring image: backimage ports: - '8088:8088' # 把容器8088端口映射到宿主机 networks: - app-network restart: always
- 修改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
- 重启服务生效:
docker-compose down && docker-compose up -d
场景2:生产环境推荐(不暴露Spring到公网)
通过Vue容器内的Nginx反向代理转发请求,让Nginx在Docker内部解析spring服务名,更安全:
- 无需修改Spring的端口配置(保持内部访问即可)
- 修改Vue项目的Nginx配置(如果用Nginx镜像部署),添加反向代理规则:
location /api { proxy_pass http://spring:8088/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
- 调整Vue的环境变量,用相对路径作为API前缀:
vue: container_name: front image: frontimage environment: VITE_API_URL: '/api' ports: - '80:80' - '443:443' restart: always networks: - app-network
- 重新构建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
相关产品推荐
相关产品推荐

