Docker 中的 Postfix:未找到主机或域名(DNS 和 Docker)

Docker 中的 Postfix:未找到主机或域名(DNS 和 Docker)

我在 Docker 19.03.5 中的 Debian 10 (buster) 上运行 Postfix 3.4.8。Postfix 配置为智能主机。它将电子邮件转发到我们 ISP 的 SMTP 服务器。

如果我relayhost使用以下设置进行配置域名就我的情况而言,SMTP 服务器的[mail.level27.be]:587发送邮件时会出现以下错误:

Host or domain name not found. Name service error for name=mail.level27.be type=A: Host not found, try again

如果我relayhost使用以下设置进行配置知识产权SMTP 服务器,就我而言[185.3.216.85]:587,它有效!

我猜这是一个 DNS 问题。我怎样才能让它使用域名而不是 IP 来工作?

使用以下命令构建 Docker 映像:

docker build --pull -t mypostfix .

以下是 Dockerfile:

FROM debian:10
EXPOSE 25

RUN apt-get update
RUN apt-get -y install libsasl2-modules postfix

RUN postconf -X 'mynetworks' \
    && postconf -e 'mynetworks_style = subnet' \
    && postconf -X 'mydestination' \
    && postconf -e 'remote_header_rewrite_domain =' \
    && postconf -e 'inet_protocols = ipv4' \
    && postconf -e 'relayhost = [mail.level27.be]:587' \
    && postconf -e 'smtp_use_tls = yes' \
    && postconf -e 'smtp_sasl_auth_enable = yes' \
    && postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd' \
    && postconf -e 'smtp_sasl_security_options = noanonymous' \
    && postconf -e 'maillog_file = /dev/stdout' \
    && echo "mail.level27.be   username:password" > /etc/postfix/sasl_passwd \
    && chown root:root /etc/postfix/sasl_passwd \
    && chmod 600 /etc/postfix/sasl_passwd \
    && postmap /etc/postfix/sasl_passwd

CMD postfix start-fg

Docker 容器通过以下命令启动:

docker run --rm -d -p 25:25 mypostfix

使用以下命令在 Docker 主机上发送电子邮件curl

echo "This is some mail content." > /tmp/email.txt

curl --url 'smtp://localhost:25' --mail-from '[email protected]' --mail-rcpt '[email protected]' --upload-file /tmp/email.txt

postqueue -p在容器中运行可以看到错误:

root@mypostfix:/# postqueue -p
-Queue ID-  --Size-- ----Arrival Time---- -Sender/Recipient-------
DBB26A05886      256 Wed Feb 19 14:45:42  [email protected]
(Host or domain name not found. Name service error for name=mail.level27.be type=A: Host not found, try again)
                                         [email protected]
-- 0 Kbytes in 1 Request.

答案1

Postfix 运行多个带有 到chroot的进程/var/spool/postfix。这意味着系统文件(如/etc/resolv.confDNS 解析)应该位于/var/spool/postfix/etc/resolv.conf

为了使其正常工作,我必须在启动期间将此文件复制到正确的位置:

CMD cp /etc/resolv.conf /var/spool/postfix/etc/resolv.conf && postfix start-fg

警告:不要在构建期间复制它,因为您最终可能会得到resolv.conf构建服务器而不是resolv.conf生产服务器。

答案2

看起来您在容器内解析 DNS 时遇到了问题。好博客文章,其中描述了您的问题,请查看。

相关内容