Maneira simples de enviar email do contêiner do Docker?

3

Eu tenho um script de backup que é executado dentro de um contêiner do Docker e gostaria que ele me enviasse um email quando o uso do disco fosse baixo.

Aqui está o script:

#!/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

O problema é que não consigo fazer o correio funcionar dentro do contêiner. Aqui está o meu arquivo 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

Eu tentei algumas coisas, mas o melhor que eu consegui fazer foi fazer com que o comando mail fosse concluído sem erros (embora eu não tenha recebido nada no meu e-mail).

Existe uma maneira simples de configurar meu contêiner para poder enviar e-mails? Eu não me importo se o e-mail vai para o spam, desde que eu receba.

    
por Olivier Lalonde 21.03.2016 / 08:20

2 respostas

3

Como Jason já mencionou, acho que é realmente mais limpo separar o seu MTA e o seu contêiner de backup.

Eu encontrei esse problema há algum tempo (embora eu tentei enviar e-mail do PHP em vez de bash), e eu descobri o exim-sender container, que é basicamente um recipiente simples que atua como um servidor SMTP de saída.

Por que não vincular seu contêiner de backup a um contêiner SMTP desse tipo? Se você, então, use ssmtp , você pode enviar e-mails através do contêiner SMTP. Ou você pode simplesmente usar outro servidor SMTP (externo) se preferir.

    
por 25.04.2016 / 17:33
0

Considere enviar um e-mail de algo como o Amazon SES ou MailGun ou qualquer outra API de e-mail baseada em HTTP, em vez de adicionar um MTA inteiro ao seu contêiner.

Ou faça uma chamada de API para um sistema de alerta, como OpsGenie ou PagerDuty, para isso.

    
por 21.03.2016 / 18:11