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

Docker容器内前端服务无法与同网络后端服务通信问题

问题原因

浏览器运行在本地主机环境,而非前端容器内部。Docker内部网络的backend域名仅能被容器网络内的服务解析,主机的DNS无法识别该域名,因此浏览器发起请求时出现ERR_NAME_NOT_RESOLVED错误。而前端容器内的curl能正常调用,是因为容器处于Docker网络中,DNS可以解析backend。

解决方案

方案1:直接使用主机映射的后端端口

后端容器已通过-p 5000:5000将端口映射到本地主机,将前端代码中的API地址从http://backend:5000修改为http://localhost:5000,浏览器即可通过主机端口访问后端服务。

方案2:配置Vite代理(推荐用于开发环境)

利用Vite的代理功能,将前端的API请求转发到后端容器,同时避免跨域问题:

  1. 修改前端项目的vite.config.js,添加代理配置:
export default {
  server: {
    proxy: {
      '/api': {
        target: 'http://backend:5000',
        changeOrigin: true,
      },
    },
  },
};
  1. 调整前端代码中的API请求路径,例如将http://backend:5000/api/get-random-video-key改为/api/get-random-video-key。
  2. 重启前端容器,此时Vite会将所有以/api开头的请求转发到后端容器,浏览器访问的是前端的3000端口,请求同源无跨域问题。

方案3:修改本地hosts文件(临时测试用)

在本地主机的hosts文件中添加映射规则,让主机识别backend域名:

  • Windows系统:编辑C:\Windows\System32\drivers\etc\hosts
  • Linux/macOS系统:编辑/etc/hosts
    添加一行:
127.0.0.1 backend

保存后,浏览器即可通过http://backend:5000访问后端服务。此方法仅适用于本地测试,换机器后需重新配置。

内容的提问来源于stack exchange,提问作者Akash Verma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:32:38