Configurer sendmail dans un conteneur docker
J'ai un conteneur docker l'exécution de php et d'apache. L'hôte est dans un AWS instance, qui est le support de l'instance en cours d'exécution. Je n'arrive pas à envoyer un e-mail à partir du menu fixe terminal. Est-il possible d'envoyer un e-mail à partir de docker instance à l'aide de sendmail qui utilise le docker est l'hôte de configuration?
La commande suivante envoie un e-mail à partir de l'hôte, mais ne pas envoyer un e-mail à partir de docker instance. Aucune erreur n'est donné.
echo "Subject: Testing Email" | cat - text | /usr/lib/sendmail -F [email protected] -t [email protected]
source d'informationauteur tarun mittal
Vous devez vous connecter pour publier un commentaire.
Ce que j'ai à faire est de configurer l'hôte MTA pour écouter sur
docker0
et installer ssmtp dans le conteneur à pont de sendmail dans le récipient avec de l'hôte MTA. La raison pour exécuter un MTA sur l'hôte, c'est que le système (critique) des erreurs peut être envoyé à l'administrateur de boîte aux lettres. La raison de ne pas exécuter des MTA dans le conteneur, c'est que c'est un double processus que le système hôte s'exécute déjà un MTA.Sur l'hôte, j'ai utilisé de postfix. Tout ce que nous devons faire est de configurer postfix pour écouter sur
docker0
et accepter les mails de conteneurs Docker. Modifier le fichier/etc/postfix/main.cf
et ajouter ledocker0
adresse IP àinet_interfaces
de sorte qu'il accepte les connexions à partir de conteneurs Docker. Aussi, ajouter les adresses réseau des conteneurs Docker àmynetworks
de sorte que les conteneurs Docker juridiques sont à envoyer des mails via le serveur postfix sur l'ordinateur hôte. (de référence et plus de détails)D'utiliser sendmail dans des conteneurs, installer ssmtp et définir
FromLineOverride
à être autorisée et etmailhub
à l'adresse IP de l'hôte dans/etc/ssmtp/ssmtp.conf
. Vous pouvez définirmailhub
à être un symbole commesmtp-server
et puis exécutez le récipient avec--add-host
option, comme indiqué dans ce Dockerfile (à exécuter avec--add-host smtp-server:your-docker0-address
). Cela permettrait de configurer un produit de sendmail dans des conteneurs qui serait en fait l'utilisation de l'hôte MTA pour envoyer des mails.sur la base des réponses,
créer config/sendmail_config.sh avec:
changement yum, apt-get de debian en fonction des contenants
puis dans Dockerfile ajouter:
Je veux sendmail avec mon php util afin que je puisse le coller n'importe où, sans avoir de lien vers un autre MTA conteneur ou de l'hôte pour compléter la tâche.
- Je exécuter sh sendmail_config.sh et puis l'exécuter mes scripts php util.
Nulle part dans votre Dockerfile est sendmail (ou tout autre agent de messagerie installé sur votre ordinateur. L'hôte, cependant, ne semble avoir sendmail disponibles. Le "meilleur" ou plus Docker comme solution est de faire tourner un autre conteneur qui exécute un MTA (comme postfix ou exim), et configurer votre application pour utiliser cela.
J'ai trouvé une façon moi-même, bien que n'étant pas la solution la plus élégante. J'ai configuré le sendmail à l'intérieur de mon menu fixe pour le Relais de la demande via ip de l'hôte. Ajoutez la ligne suivante dans le fichier "/etc/mail/access
Aussi, dans l'accueillir ainsi que le panneau, commentez la ligne suivante dans le fichier "/etc/mail/sendmail.mc" en préfixant avec "dnl #" et suffixant avec "dnl".
J'ai passé l'ip de l'hôte comme une variable d'environnement pour le menu fixe conteneur, de sorte qu'il est configurable. Maintenant, le panneau de sendmail relais c'est de sendmail smtp demande par l'intermédiaire de la machine hôte.
L'ajout d'un nom de domaine pleinement qualifié pour le Docker nom d'hôte dans le fichier /etc/hosts fait le truc pour moi:
Pour moi, il ressemble à ceci:
Vous pouvez également utiliser ce script bash pour mettre à jour automatiquement cette ligne:
Référence: http://hjk41.azurewebsites.net/2015/09/25/using-sendmail-inside-docker/
En supposant qu'il existe un serveur de messagerie installé et configuré sur l'hôte!
Alpin base de docker images doivent avoir
sendmail
exécutable.La solution la plus simple est de lancer le conteneur sur l'hôte du réseau:
Pour exécuter le conteneur par défaut pont réseau,
configurer mail server pour écouter sur le panneau d'interface 172.17.0.1,
et de permettre à relais e-mails à partir de panneau de sous-réseau 172.17.0.0/16.
Exim options affectées dans: /etc/exim4/update-exim4.conf.conf
Redémarrage du serveur de messagerie et d'exécuter le conteneur verbose:)
EDIT: Veuillez voir xuhdev réponse pour plus d'informations et comment configurer mail expéditeur. Ma réponse peut être utilisé pour configurer sendmail au lieu de postfix sur l'hôte.
EDIT #2: Ajouter une règle de pare-feu pour autoriser le trafic smtp de docker
J'ai fait une similaire configuration que le tarun mittal comme suit:
dans le panneau d'accueil, modifié le /etc/mail/sendmail.mc à inclure à l'écoute sur le docker0 interface (contrairement à toutes les interfaces de tarun la réponse de gras est ajouté la ligne)
DAEMON_OPTIONS (Famille=inet, Nom=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl
DAEMON_OPTIONS (Famille=inet, Nom=MTA-v4, Port=smtp, Addr=172.17.42.1')dnl
Permettre l'accès à partir du menu fixe conteneurs docker interface de pare-feu
iptables -I INPUT-s 172.17.0.0/24 -d 172.17.42.1 -dport 25 -j ACCEPT
dans /etc/mail/access, j'ai ajouté à la fin pour permettre à tous docker instances pour envoyer des emails et makemap hash /etc/mail/access < /etc/mail/access à la compilation de la base de données
///ÉDITÉ UTILISATION CI-DESSOUS COMME DOCKER VA ALLER À 172.17.1.X après de nombreuses reconstructions
///OLD - Connect:172.17.0 RELAIS
Connect:172.17 RELAIS
Enfin redémarrez sendmail - service sendmail restart
J'ai du mal avec cette question. À partir de mon code python fonctionnant à l'intérieur d'un conteneur docker, j'avais besoin temporairement d'envoyer des e-mails à l'aide de postfix (serveur smtp) en cours d'exécution sur la machine hôte. Après avoir essayé des tas de choses, ce qui s'est avéré être une solution simple a été le panneau de commande exécuter --nette="accueil". Attention: Cela peut ne pas être une bonne solution dans tous les cas comme un conteneur de partager la pile réseau avec le panneau d'accueil et à partir du conteneur de point de vue, localhost(ou 127.0.0.1) consulter le panneau d'accueil.
Voici ce que j'ai fait sur une ubuntu hôte:
docker run- --nette="accueil" ubuntu /bin/bash
Cela m'a donné l'enceinte.
J'ai ensuite installé python dans ce conteneur:
apt-get update && apt-get-y install superviseur python-pip
Puis j'ai lancé l'interpréteur python et a tiré les lignes de code suivantes:
J'ai aussi trouvé [ce][1] un utile de lire.
Selon le manuel de Sendmail nous pouvons utiliser
sendmail -bd
commande pour exécuter un service. Mais il existe avec zéro statut. Alors...Aussi vous pouvez utiliser des supervisord.
J'utilise cette config:
Et de le tester:
N'oubliez pas de vérifier le dossier Spam.
Vous avez à point inet_interfaces pour panneau de pont (docker0) en post-fix config situé à /etc/postfix/main.cf
inet_interfaces =
Plus de travail interne de détail à l'envoi d'un mail docker via postfix installé sur l'ordinateur hôte
Remarque: utilisez la commande ifconfig pour obtenir le menu fixe adresse de passerelle