无法通过自定义域名访问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.confserver_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)。
- Windows:
- 确保本地防火墙没有拦截80端口的请求。
4. 测试访问
做完上面的步骤,打开浏览器访问http://my-domain.site,或者用curl测试:
curl http://my-domain.site
应该就能正常访问到你的后端服务了!
另外提个小细节:你的api服务映射了4000:4000,其实在Docker Compose内部,nginx通过api:4000访问后端不需要这个端口映射(服务之间的默认网络是互通的),不过留着也不影响,只是没必要对外暴露后端端口而已。
备注:内容来源于stack exchange,提问作者William Le
相关产品推荐
相关产品推荐

