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

无法通过自定义域名访问Docker Compose部署的后端服务,提示Cannot reach domain defined by server_name

无法通过自定义域名访问Docker Compose部署的后端服务,提示Cannot reach domain defined by server_name

嘿,我之前也碰到过几乎一模一样的问题,大概率是本地域名解析没配置到位,再加上几个小细节需要核对,咱们一步步来排查:

1. 先搞定本地DNS映射(最关键的一步)

你在nginx容器里挂载了hosts文件,但那只是容器内部的域名映射——你的本地电脑根本不知道my-domain.site该指向哪里!所以必须在本地电脑的hosts文件里加一条记录:

  • Windows用户:打开C:\Windows\System32\drivers\etc\hosts(需要管理员权限编辑),添加一行:
    127.0.0.1 my-domain.site
    
  • macOS/Linux用户:打开/etc/hosts,同样添加上面那行,保存后可以用sudo dscacheutil -flushcache(macOS)或者sudo systemctl restart nscd(Linux)刷新DNS缓存。

这一步做完,你的电脑访问my-domain.site时才会指向本地运行的nginx服务(毕竟nginx已经把80端口映射到本地了)。

2. 确认nginx配置和容器状态

你的nginx配置看起来没啥大问题,但可以再核对下细节:

  • 进入nginx容器检查配置是否正确加载:
    docker exec -it nginx cat /etc/nginx/conf.d/default.conf
    
    确保server_name确实是my-domain.site,proxy_pass是http://api:4000(这个是对的,Docker Compose的服务之间可以直接用服务名通信)。
  • 如果配置没问题,重启nginx容器让配置生效:
    docker-compose restart nginx
    

3. 检查端口占用和防火墙

  • 确认本地80端口没被其他程序占用(比如Apache、IIS或者其他服务):
    • Windows:netstat -ano | findstr :80
    • macOS/Linux:lsof -i :80
      如果有占用,要么停止对应的服务,要么修改nginx的端口映射(比如改成8080:80,之后访问my-domain.site:8080)。
  • 确保本地防火墙没有拦截80端口的请求。

4. 测试访问

做完上面的步骤,打开浏览器访问http://my-domain.site,或者用curl测试:

curl http://my-domain.site

应该就能正常访问到你的后端服务了!

另外提个小细节:你的api服务映射了4000:4000,其实在Docker Compose内部,nginx通过api:4000访问后端不需要这个端口映射(服务之间的默认网络是互通的),不过留着也不影响,只是没必要对外暴露后端端口而已。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:53:14