You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose环境下Postfix配置lmtp:dovecot:24出现域名解析错误的问题排查

Docker Compose环境下Postfix配置lmtp:dovecot:24出现域名解析错误的问题排查

问题场景

你在Docker Compose里部署了postfix、dovecot和client三个服务,通过bridge网络互通。Postfix配置了virtual_transport = lmtp:dovecot:24,想把收到的邮件转发到Dovecot的LMTP端口,但发送邮件后Postfix队列一直报错:

(Host or domain name not found. Name service error for name=dovecot type=A: Host not found, try again)

奇怪的是,在Postfix容器里用nslookup dovecot能正常解析到Dovecot的IP,直接把IP写进配置(比如lmtp:172.18.0.4:24)就完全正常,队列能清空,邮件也能正确投递。

问题根源

这其实是Postfix的LMTP服务配置导致的——Postfix默认的master.cf里,LMTP的条目配置没有使用系统默认的域名解析机制。虽然系统层面的工具(比如nslookup)能正常解析Docker的服务名,但Postfix的LMTP进程本身的解析逻辑走了不同的路径,没有正确调用Docker内置的DNS服务。

具体来说,默认的lmtp配置可能限制了解析方式,或者使用了不兼容的socket类型,导致它无法识别Docker Compose提供的服务域名。

解决方案

你找到的修改master.cf的方法是完全正确的,只需要在Postfix镜像的Dockerfile里添加这一行命令:

RUN sed -i'' -e 's/^lmtp .*/lmtp      unix  -       -       n       -       -       lmtp/g' /etc/postfix/master.cf

这行命令会把master.cf里原有的lmtp条目替换为使用unix socket的配置(调整后的参数让LMTP进程使用系统默认的域名解析逻辑),这样Postfix就能正常解析dovecot这个服务名,顺利把邮件转发到Dovecot的LMTP端口了。

额外说明

为什么直接用IP就没问题?因为IP地址不需要域名解析,Postfix可以直接建立TCP连接。而用服务名时,原来的LMTP配置没有正确触发系统的DNS解析流程,所以才会出现“找不到主机”的错误——哪怕系统工具能解析,进程自己的逻辑没走对也没用。

备注:内容来源于stack exchange,提问作者Losmoges

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:32:40