Docker Compose前端调用后端出现net::ERR_NAME_NOT_RESOLVED错误求助
浏览器运行在宿主机的网络环境中,无法识别Docker Compose内部的服务域名backend——Docker Compose的服务名解析仅在容器所在的Docker专属网络内生效,宿主机(包括浏览器)没有对应的DNS映射,因此会触发net::ERR_NAME_NOT_RESOLVED错误。
以下是三种可行的解决方案,按需选择:
方案1:通过宿主机端口映射访问后端
在Docker Compose的backend服务配置中添加端口映射,将容器的8080端口映射到宿主机的对应端口(示例映射到宿主机8080):services: backend: ports: - "8080:8080" # 其他原有配置...修改Angular应用的请求地址为
http://localhost:8080/test/health(如果是远程服务器部署,替换为服务器的公网IP或域名)。方案2:配置代理转发(开发/生产通用)
开发环境:在Angular项目根目录创建proxy.conf.json文件,内容如下:{ "/test": { "target": "http://backend:8080", "secure": false, "changeOrigin": true } }启动Angular时指定代理配置:
ng serve --proxy-config proxy.conf.json,此时前端请求/test/health会自动转发到Docker内部的后端服务。生产环境:如果前端通过Nginx部署,在frontend容器的Nginx配置中添加反向代理规则:
location /test { proxy_pass http://backend:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }之后Angular应用只需请求相对路径
/test/health,由前端Nginx负责转发到后端,避免浏览器直接访问Docker内部域名。方案3:手动添加宿主机DNS映射(仅本地开发用)
在宿主机的/etc/hosts(Linux/macOS)或C:\Windows\System32\drivers\etc\hosts(Windows)文件中添加一行:127.0.0.1 backend这种方式仅适合本地开发调试,服务器部署时不推荐,因为IP可能变动且无法适配多环境。
内容的提问来源于stack exchange,提问作者alloisxp

