web-dev-qa-db-ja.com

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

私はいくつかのことを試しましたが、最善の方法は、メールコマンドをエラーなしで完了することです(ただし、メールには何も届きませんでした)。

メールを送信できるようにコンテナーを構成する簡単な方法はありますか?メールを受信する限り、メールがスパムに送られてもかまいません。

6
Olivier Lalonde

Jasonが既に述べたように、MTAとバックアップコンテナーを分離する方が確かにきれいだと思います。

私はしばらく前にこの問題に遭遇しました(ただし、bashの代わりにPHPからメールを送信しようとしました)、そして exim-sender コンテナを発見しました。送信SMTPサーバーとして機能する単純なコンテナー。

バックアップコンテナーをそのようなSMTPコンテナーにリンクしてみませんか?次に se ssmtp とすると、SMTPコンテナを介してメールを送信できます。または、必要に応じて別の(外部)SMTPサーバーを使用することもできます。

5
Rick

MTA全体をコンテナに追加するのではなく、Amazon SESやMailGunなどのHTTPベースのメールAPIなどからメールを送信することを検討してください。

または、OpsGenieやPagerDutyなどのアラートシステムに対してAPI呼び出しを行います。

0
Jason Martin