您的当前位置:首页正文

查BUG小记:自建DNS+Nginx+Docker,无法通过域名访问容器

2024-08-09 来源:抵帆知识网

有网友碰到这样的问题“查BUG小记:自建DNS+Nginx+Docker,无法通过域名访问容器”。小编为您整理了以下解决方案,希望对您有帮助:

解决方案1:

最近,我将一台久未使用的笔记本作为服务器,准备部署一些本地服务。首先,我用Docker构建了两个服务:Gitea作为代码托管平台,考虑到国内github服务不稳定且可能存在代码AI训练问题;Adguardhome作为私有DNS服务器,用于减少广告和跟踪,并作为本地服务的域名解析,以方便通过域名访问服务,避免IP地址变更时的修改麻烦。我计划通过local.adguardhome.com和local.gitea.com来访问这两个服务。

配置步骤如下:在Adguardhome中,将这两个域名指向服务器IP;使用Nginx进行静态转发,这样无论服务端口如何,都能通过域名访问。在Windows系统中,直接将DNS服务器IP设置为服务器IP即可。

在尝试访问gitea服务时,突然发现无法通过域名访问。经过排查,首先确认gitea服务正常工作,docker日志中未见异常,通过IP直接访问也能正常连接。在WSL中进行域名解析测试,结果正常。怀疑Nginx配置问题,尝试访问Adguardhome服务,结果正常。检查Nginx日志,发现在访问local.gitea.com时,服务器未收到请求。使用tcpdump抓包,发现访问local.gitea.com时,服务器根本没有收到请求。检查Adguardhome日志,也未记录对local.gitea.com的域名解析请求。这说明问题可能出在DNS缓存上。DNS缓存机制在查询结果后有一定有效期,重复查询时直接使用缓存结果,这可能导致Windows系统在缓存中记录了错误的IP地址。通过执行ipconfig /flushdns命令清除缓存,问题得以解决。

这是一次完整的故障排查经历。从Windows浏览器到服务器DNS服务、再到服务器的Nginx、最终到Gitea Docker,每一步都清晰地定位了问题所在,并最终通过清除DNS缓存找到了解决办法。这次经历不仅解决了实际问题,还加深了对DNS缓存机制的理解。

显示全文