码头工人。从主机发送邮件
Posted
技术标签:
【中文标题】码头工人。从主机发送邮件【英文标题】:Docker. Send mail from host 【发布时间】:2017-06-24 10:03:57 【问题描述】:我可以使用邮件从主机发送邮件:
mail -s "Hooray" smb@example.com < /dev/null
但我想使用主机服务器从 docker 容器发送邮件。当我尝试在运行命令中将其映射到 25 端口时,Docker 说“端口已在使用中”:
run -ti -p 25:25 container
我怎样才能实现目标? Host是Centos,docker使用Ubuntu。
【问题讨论】:
嗨。你找到解决办法了吗? @spiil 你好,不,我放弃了:) 我设法直接从 gmail smtp 服务器发送电子邮件 哦,好的。谢谢你的回复:) 【参考方案1】:您不能在同一个端口上侦听多个应用程序。因此,如果主机上已经有一个应用程序在侦听端口 25,您可以停止该应用程序,或者将您的容器配置为侦听不同的主机端口,例如:
run -ti -p 2525:25 container
这会导致端口从主机端口 2525 映射到容器端口 25。如果您不需要从容器接收邮件,您可以完全删除此端口映射,仍然允许您发送出站消息。
如果您不知道主机上的 25 端口在使用什么,您可以使用 netstat 命令进行查找:
sudo netstat -lntp
请注意,如果您想查看正在侦听端口的进程,则需要 sudo。
【讨论】:
我想从容器中发送邮件(根本不想接收),所以我根本不需要映射端口? 如果您不需要从容器接收邮件,您可以完全删除此端口映射,这样您仍然可以发送出站邮件。【参考方案2】:将端口转发与 docker 容器一起使用,您可以将容器的端口转发到主机。因此,邮件服务器已在主机上使用端口 25。这里需要将端口从主机转发到容器:
Forward host port to docker container
最简单的方法是使用--net=host
选项:
docker run --rm -it --net=host container mail -s "Hooray" smb@example.com < /dev/null
【讨论】:
也许有一种方法可以在不使用 --net=host 的情况下做到这一点?我也在网络中使用其他几个容器。以上是关于码头工人。从主机发送邮件的主要内容,如果未能解决你的问题,请参考以下文章
绕过 Gmail 的垃圾邮件过滤器(使用 PHP 从共享主机发送的邮件)