tar*_*tal 24 ubuntu sendmail amazon-web-services docker
我有一个运行php和apache 的docker容器.主机位于运行docker实例的AWS实例中.我无法从docker终端发送电子邮件.有没有办法使用sendmail使用docker的主机配置从docker实例发送电子邮件?
以下命令从主机发送电子邮件,但不从docker实例发送电子邮件.也没有错误.
echo "Subject: Testing Email" | cat - text | /usr/lib/sendmail -F abc.pqr@domain.com -t abc.pqr@domain.com
Run Code Online (Sandbox Code Playgroud)
xuh*_*dev 20
我所做的是配置主机MTA监听docker0
并在容器中安装ssmtp,以便在容器中与主机MTA桥接sendmail.在主机上运行MTA的原因是系统(严重)错误可以发送到管理员的邮箱.不在容器中运行MTA的原因是它是一个重复的进程,因为主机系统已经运行了MTA.
在主机上,我使用了postfix.我们需要做的就是配置postfix来监听docker0
并接受来自Docker容器的传出邮件.编辑文件/etc/postfix/main.cf
并添加docker0
IP地址,inet_interfaces
以便它接受来自Docker容器的连接.此外,添加Docker容器的网络地址,mynetworks
以便Docker容器合法通过主机上的postfix服务器发送邮件.(参考和更多细节)
要在容器中使用sendmail,请安装ssmtp并将其设置FromLineOverride
为允许,并安装mailhub
到主机的IP地址中/etc/ssmtp/ssmtp.conf
.您可以将其设置mailhub
为符号smtp-server
,然后使用--add-host
选项运行容器,如此Dockerfile中所示(运行它--add-host smtp-server:your-docker0-address
).这将在容器中配置可用的sendmail,它实际上将使用主机MTA发送邮件.
小智 5
您的Dockerfile中没有任何地方安装了sendmail(或任何其他邮件代理).但是,主机显然确实有sendmail可用."最佳"或类似Docker的解决方案是启动另一个运行MTA的容器(如postfix或exim),并配置您的应用程序使用它.
根据以前的答案,使用以下命令
创建config/sendmail_config.sh:
#!/bin/sh
# set host in hosts
line=$(head -n 1 /etc/hosts)
line2=$(echo $line | awk '{print $2}')
echo "$line $line2.localdomain" >> /etc/hosts
yum install -y sendmail sendmail-cf m4 \
&& hostname >> /etc/mail/relay-domains \
&& m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
#remove localhost limit
sed -i -e "s/Port=smtp,Addr=127.0.0.1, Name=MTA/Port=smtp, Name=MTA/g" \
/etc/mail/sendmail.mc
sendmail -bd
Run Code Online (Sandbox Code Playgroud)
在基于debian的容器上更改yum for apt-get
然后在Dockerfile中添加:
RUN sed -i -e "s#;sendmail_path =#sendmail_path = /usr/sbin/sendmail -t -i#g" \
/your_path_to/php.ini
COPY ./config/sendmail_config.sh .
Run Code Online (Sandbox Code Playgroud)
我想用我的php util发送sendmail所以我可以把它粘在任何地方而不必链接到另一个MTA容器或主机来完成任务.
我运行sh sendmail_config.sh,然后运行我的php util.
假设在主机上安装并配置了一个邮件服务器!
基于高山的泊坞窗映像应具有sendmail
可执行文件。
简单的解决方案是在主机的网络上运行容器:
docker run --rm --net="host" php:fpm-alpine sh -c 'echo "Subject: test" | sendmail -v your@mail.com'
Run Code Online (Sandbox Code Playgroud)
要使用默认网桥运行容器,请将邮件服务器配置为侦听docker接口172.17.0.1,并允许中继来自docker子网172.17.0.0/16的电子邮件。
受以下影响的Exim选项:/etc/exim4/update-exim4.conf.conf
dc_local_interfaces='127.0.0.1 ; ::1 ; 172.17.0.1'
dc_relay_nets='172.17.0.0/16'
Run Code Online (Sandbox Code Playgroud)
重新启动邮件服务器并运行详细的容器:)
docker run --rm --hostname="your-domain.com" php:fpm-alpine sh -c 'echo "Subject: test" | sendmail -v your@mail.com -S 172.17.0.1'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
46049 次 |
最近记录: |