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

Oli*_*nde 7 email ubuntu 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' olalonde@gmail.com << EOF
Backup server remaining free space is critically low. Used: $CURRENT%
EOF
fi
Run Code Online (Sandbox Code Playgroud)

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

FROM ubuntu:latest
MAINTAINER olalonde@gmail.com
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
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些事情,但我能做的最好的事情就是让邮件命令无误地完成(尽管我没有收到任何电子邮件)。

有没有一种简单的方法来配置我的容器以便能够发送邮件?只要我收到邮件,我不在乎邮件是否会变成垃圾邮件。

小智 5

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

我前段时间遇到了这个问题(虽然我尝试从 PHP 而不是 bash 发送邮件),我发现了exim-sender容器,它基本上是一个简单的容器,充当外发 SMTP 服务器。

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


Jas*_*tin 1

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

或者对 OpsGenie 或 PagerDuty 等警报系统进行 API 调用。