Ну, вообщем, Вы всё сами правильно ответили.
Я использую указанный Вами 2й вариант. В
Dockerfile
добавляется слой с
ssmtp
и всё. В качестве
ENTRYPOINT
небольшой sh-скрипт, который конфигурирует s
ssmtp
при старте контейнера в зависимости от переменных окружения. Все письма пересылаются на внешний центральный Postfix, который уже крутит всю бодягу с DKIM подписями и прочими email-прибамбасами.
Если Вы посадите этот Postfix внешний на ту же машину, где у Вас крутится и приложение, то вероятность потери такая же, как и в "традиционном" случае без Докера (ведь у Вас на машине Postfix или Exim все равно крутятся).
Также, как вариант, если есть возможность, можно предусмотреть retries для отправки email в самом коде приложения, если это настолько критично.
По поводу примерного
docker-compose.yml
:
version: '3'
services:
fpm:
container_name: fpm
image: my/app
depends_on:
- mailserver
expose:
- "9000" # php-fpm
environment:
- SMTP_SERVER=mailserver:587
- SMTP_USER=testing@moderation.test
- SMTP_PASSWORD=qweqweqwe
nginx:
container_name: nginx
image: nginx:stable-alpine
depends_on:
- fpm
ports:
- "80:80" # http
volumes:
- .dev/nginx.vhost.conf:/etc/nginx/conf.d/default.conf:ro
mailserver:
container_name: mailserver
image: tvial/docker-mailserver:v2
hostname: mail
domainname: mydomain.test
ports:
- "25:25" # smtp
- "143:143" # imap
- "587:587" # smtp-auth
- "993:993" # imap-secure
volumes:
- .dev/mail/accounts.cf:/tmp/docker-mailserver/postfix-accounts.cf:ro