从 Docker 容器发送邮件的简单方法?

从 Docker 容器发送邮件的简单方法?

我有一个在 Docker 容器内运行的备份脚本,我希望它在磁盘使用率较低时向我发送一封电子邮件。

脚本如下:

#!/bin/bash
CURRENT=$(df /data | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=90

echo "$CURRENT"

if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
    echo "Low Disk Space Alert: ${CURRENT}% used"
  mail -s 'Disk Space Alert' [email protected] << EOF
Backup server remaining free space is critically low. Used: $CURRENT%
EOF
fi

问题是我无法让邮件在容器内工作。这是我的 Docker 文件:

FROM ubuntu:latest
MAINTAINER [email protected]
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
  apt-get install -y postfix && \
  apt-get install -y mailutils && \
  apt-get clean
ADD rootfs /
CMD /disk-alert.sh

我尝试了一些方法,但我能做的最好的就是让邮件命令顺利完成而没有错误(尽管我没有收到任何电子邮件)。

有没有简单的方法可以配置我的容器以便能够发送邮件?只要我收到邮件,我不在乎它是否被归为垃圾邮件。

答案1

正如 Jason 已经提到的,我认为将 MTA 和备份容器分开确实更干净。

我以前遇到过这个问题(虽然我尝试用 PHP 而不是 bash 发送邮件),我发现进出口发件人容器,它基本上是一个充当传出 SMTP 服务器的简单容器。

为什么不将你的备份容器链接到这样的 SMTP 容器呢?如果你使用 ssmtp,您可以通过 SMTP 容器发送邮件。或者,如果您愿意,也可以使用另一个(外部)SMTP 服务器。

答案2

考虑从 Amazon SES 或 MailGun 或任何其他基于 HTTP 的邮件 API 发送电子邮件,而不是将整个 MTA 添加到您的容器中。

或者向警报系统(例如 OpsGenie 或 PagerDuty)发出 API 调用。

相关内容