在 docker 容器中运行的 postfix 实例似乎无法解析我的中继的主机名,即 outbound.mailhop.org(以前是 Oracle,现在归 DuoCircle 所有)。
中继失败并显示以下消息:
Apr 5 14:59:27 smtp postfix/smtp[103]: 10E6F481F6D: to=<[email protected]>, relay=none, delay=938, delays=938/0.03/0/0, dsn=4.4.3, status=deferred (Host or domain name not found. Name service error for name=outbound.mailhop.org type=A: Host not found, try again)
在上面的设置中我使用了如下 A 记录查找:
relayhost = [outbound.mailhop.org]:465
但 MX 记录查找也会失败:
relayhost = outbound.mailhop.org:465
为了分析问题,我扩展了debian:stable-slim
镜像以包含包,并在容器内dnsutils
启动了一个交互式shell。在那里我可以使用或进行查找,没有任何问题。bash
outbound.mailhop.org
nslookup
dig
我能想到的唯一相关的东西是 nscd。启动 postfix 需要 unscd 包。然而根据/etc/nscd.conf
which 的说法:
enable-cache hosts no
任何查找都应始终直接寻址名称服务器。
我真的不明白为什么nslookup
工作dig
却postfix
显示出问题。
答案1
因此,问题的原因在于,master.cf
子程序relay
配置为在chroot
位于 的中运行/var/spool/postfix
。由于在我的容器中没有/etc/hosts
或/etc/resolv.conf
相对于 chroot 目录的 ,因此 postfix 无法正确解析主机名也就不足为奇了。
- 起初我只是将现有的复制
/etc/resolv.conf
到 chroot 目录就可以了。 - 在 docker 容器中运行 postfix - 就像是强化版的 chroot - 后来我将其改为
master.cf
禁用所有 postfix 子程序的 chrooting。