![为什么容器在不同的主机上运行时 sendmail 不起作用?](https://linux22.com/image/723711/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%B9%E5%99%A8%E5%9C%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E4%B8%BB%E6%9C%BA%E4%B8%8A%E8%BF%90%E8%A1%8C%E6%97%B6%20sendmail%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
我有一个在 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)上运行容器时,我可以直接使用sendmail
bash 中的命令发送电子邮件,不会出现任何问题。我可以在我的邮箱中收到这些电子邮件。
但是,当我在云实例上运行容器时(在我的情况下是在 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 被过滤了。