同一台服务器上,宿主机能访问网站,容器里的程序却提示域名解析失败,并不矛盾。容器有自己的文件系统与网络配置,需要独立确认解析链路。

从 resolv.conf 开始

先看宿主机的 /etc/resolv.conf,再运行 docker exec 容器名 cat /etc/resolv.conf。这里的 nameserver 指定解析服务器。如果文件没有有效解析器,不同语言运行时可能使用不同的默认行为。

localhost 的含义取决于网络模式

桥接网络里的 127.0.0.1 指向容器自身。把宿主机的本地 DNS 地址照搬进去,经常会失败。host 网络共享宿主机网络空间,但仍要检查容器内的解析配置文件是否有效。

分清 DNS 与 HTTPS 故障

“lookup failed”通常发生在建立连接之前;“certificate verify failed”发生在 TLS 校验阶段;“connection refused”则表示连接目标没有接受请求。把这些错误混为一谈,会导致改错配置。

先验证,再持久化

可以先在容器内做解析与 HTTPS 请求测试。确认可用后,把 DNS 配置写入 Compose,例如:

1
2
3
4
5
6
services:
app:
image: your-image:tag
dns:
- 1.1.1.1
- 8.8.8.8

这只是格式示例。实际应优先使用所在云平台或网络中可达、可信的解析器;公共 DNS 不一定能解析私有域名。

变更后再做一次完整请求

解析出地址只是第一步,还应确认 TCP、TLS 与应用响应。临时修改容器文件容易在重建后丢失,最终配置应放回部署文件,并保留变更记录。