Docker部署Nginx反向代理遇域名解析失败问题求助
解决Docker Nginx反向代理域名解析失败问题
针对你遇到的send() failed (111: Connection refused)和example.com could not be resolved错误,可按以下步骤排查修复:
1. 替换Resolver地址
Docker内置的127.0.0.11 DNS解析器偶尔会出现连通性异常,直接替换为公共DNS服务器即可规避这类问题,比如Google的8.8.8.8或Cloudflare的1.1.1.1:
http { server { listen 80 default_server; listen [::]:80 default_server; location / { proxy_http_version 1.1; proxy_set_header "Connection" ""; resolver 8.8.8.8 1.1.1.1 valid=300s; proxy_pass http://example.com; } } }
添加valid=300s参数可缓存解析结果,减少重复DNS请求的开销。
2. 启用动态域名解析(按需使用)
如果后端服务的IP地址会频繁变动,需要Nginx实时刷新域名解析结果,需将proxy_pass改为变量形式,触发resolver的动态解析逻辑:
http { server { listen 80 default_server; listen [::]:80 default_server; location / { proxy_http_version 1.1; proxy_set_header "Connection" ""; resolver 8.8.8.8 valid=300s; set $upstream example.com; proxy_pass http://$upstream; } } }
3. 排查容器网络连通性
进入Nginx容器手动测试,确认问题根源:
# 替换为你的Nginx容器名/ID docker exec -it nginx-container bash # 测试域名解析 nslookup example.com # 测试网络连通性 curl http://example.com
如果nslookup失败,说明容器DNS配置异常,启动容器时可手动指定DNS:
docker run -d --name nginx-container --dns 8.8.8.8 -p 80:80 -v /本地配置路径/nginx.conf:/etc/nginx/nginx.conf nginx
4. 验证配置并重启容器
每次修改配置后,先检查语法正确性,再重启容器生效:
docker exec nginx-container nginx -t docker restart nginx-container
内容的提问来源于stack exchange,提问作者Weeedooo
相关产品推荐
相关产品推荐

