web-dev-qa-db-ja.com

DockerのPostfix:ホストまたはドメイン名が見つかりません(DNSおよびDocker)

Docker 19.03.5のDebian 10(buster)でPostfix 3.4.8を実行しています。 Postfixはスマートホストとして設定されています。 ISPのSMTPサーバーにメールを中継します。

SMTPサーバーのドメイン名を使用してrelayhost設定を構成すると、私の場合は[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

[〜#〜] ip [〜#〜]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

電子メールは、次のcurlコマンドを使用してDockerホストで送信されます。

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.
2
Stefaan Neyts

Postfixはchrootから/var/spool/postfixまでのいくつかのプロセスを実行します。これは、DNS解決のための/etc/resolv.confのようなシステムファイルが/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
Stefaan Neyts

コンテナ内のDNS解決に問題があるようです。 良いブログ投稿 があり、あなたの問題を説明しているので、チェックしてください。

1