为什么容器在不同的主机上运行时 sendmail 不起作用?

为什么容器在不同的主机上运行时 sendmail 不起作用?

我有一个在 Debian (stretch) 上运行的 Docker 容器。我已在 Docker 容器上进行了sendmail安装apt-get install sendmail,以便可以从容器发送电子邮件。

以下是我的 Dockerfile 的样子:

FROM php:5.6-apache
RUN apt-get update && \
  apt-get install -y sendmail && \
  apt-get clean

我运行一些命令来更新主机文件:

host=$(hostname)
line=$(cat /etc/hosts |grep [1]27.0.0.1)
echo "$line localhost.localdomain $host" >> /etc/hosts

当我通过 Virtualbox 在本地开发机器(Windows)上运行容器时,我可以直接使用sendmailbash 中的命令发送电子邮件,不会出现任何问题。我可以在我的邮箱中收到这些电子邮件。

但是,当我在云实例上运行容器时(在我的情况下是在 Digital Ocean 上运行),sendmail在 bash 中运行相同的命令不会发送电子邮件。没有任何错误或任何其他错误。命令sendmail只是返回,好像电子邮件已成功发送,但我从未在邮箱中收到它。

当我在云实例上的 Docker 容器中运行 mailq 时,我看到以下错误消息:

Mon Jun 25 02:05 <[email protected]> (Deferred: Connection timed out with alt4.gmail-smtp-in.l.goo)

在我的本地计算机上运行时,同一个容器中的mailq中没有错误消息。

Docker 容器在不同的主机上不应该也能正常工作吗?为什么sendmail在本地计算机上的容器中运行时可以正常工作,但在云实例上运行时却不行?

答案1

您可以使用其他实用程序连接到端口 25 上的任何服务器吗?

您可以使用“telnet”轻松测试错误消息中显示的 Google 服务器。如果您可以访问它,您应该会看到类似以下内容:

$ telnet alt4.gmail-smtp-in.l.google.com 25
Trying 74.125.195.26...
Connected to alt4.gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP z2-v6si2977862pfz.241 - gsmtp

如果不能,您应该检查您可能拥有的任何防火墙。Digital Ocean 在控制面板上集成了自己的防火墙。如果配置不正确,则可能是端口 25 被过滤了。

相关内容