У меня есть сценарий резервного копирования, который выполняется внутри контейнера 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
Проблема в том, что мне не удается заставить почту работать внутри контейнера. Вот мой файл 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
Я пробовал несколько вещей, но лучшее, что я мог сделать, это заставить почтовую команду завершиться без ошибок (хотя я ничего не получил на свою электронную почту).
Есть ли простой способ настроить мой контейнер для отправки почты? Мне все равно, попадет ли почта в спам, пока я ее получаю.
Как уже упоминал Джейсон, я думаю, что действительно лучше разделить ваш MTA и резервный контейнер.
Некоторое время назад я столкнулся с этой проблемой (хотя я пытался отправлять почту с PHP вместо bash), и я обнаружил exim-отправитель контейнер, который по сути представляет собой простой контейнер, который действует как исходящий SMTP-сервер.
Почему бы не связать резервный контейнер с таким SMTP-контейнером? Если ты тогда использовать ssmtp, вы можете отправлять письма через SMTP-контейнер. Или вы можете просто использовать другой (внешний) SMTP-сервер, если хотите.
Рассмотрите возможность отправки электронной почты из чего-то вроде Amazon SES или MailGun или любого другого почтового API на основе HTTP, вместо того, чтобы добавлять весь MTA в свой контейнер.
Или вызовите API-интерфейс системы оповещения, такой как OpsGenie или PagerDuty.