将 Docker 用于邮件服务器 [关闭]

Posted

技术标签:

【中文标题】将 Docker 用于邮件服务器 [关闭]【英文标题】:Using Docker for a mail server [closed] 【发布时间】:2015-03-26 20:53:15 【问题描述】:

我对 docker 感兴趣已经有一段时间了,但还没有涉足。我需要设置一个邮件服务器,所以我想也许我可以以此为理由来了解更多关于 docker 的信息。但是,我不清楚如何最好地解决它。

我之前在 VPS 上安装了邮件服务器,但没有安装到多个容器中。我想安装 Postfix、Dovecot、mysql 或 Postgresql 和 SpamAssassin,类似于此处描述的内容:

https://www.digitalocean.com/community/tutorials/how-to-configure-a-mail-server-using-postfix-dovecot-mysql-and-spamassasin

但是,将它码头化的好方法是什么?我会简单地将所有东西都放在一个容器中吗?或者将 MySQL 放在一个容器中,将 Postfix 放在另一个容器中,以及用于 Dovecot 和 SpamAssassin 的附加容器中会更好吗?还是应该共享一些容器?

有没有关于使用 docker 安装邮件服务器的 HOWTO?如果有,我还没找到。

【问题讨论】:

经过大量研究和大量努力,在 docker 内的 VPS 上滚动我自己的 postfix 服务器后,我发现这个 repo 得到了积极维护——它是一个 postfix 服务器,默认在 docker 内运行,以提供简单的配置设置您自己的域来发送和接收电子邮件 - 我已经在 prod 中使用了几年并且它很可靠 - 强烈建议您使用github.com/tomav/docker-mailserver 【参考方案1】:

Docker 的重点不是为了容器化而容器化。就是把属于一起的东西放在一起,把不属于一起的东西分开。

考虑到这一点,我的设置方式是使用一个用于 MySql 数据库的容器和另一个用于所有邮件组件的容器。邮件组件通常通过调用彼此的可执行文件或通过读取/写入共享文件来相互集成,因此无论如何将它们分开在单独的容器中是没有意义的。由于数据库还可以用于其他事情,并且通过套接字完成与它的通信,因此将其作为一个单独的容器更有意义。

【讨论】:

其实,如果你已经设置好了,组件之间的通信是LMTP,可能有点过滤。 @Moshe,我理解你的意思,但我还有其他建议。有人建议,如果 MTA 在内部调用其他可执行文件,最好将它们保持在同一个映像中。但是,如果这些可执行文件在自己的进程空间中作为自己的命令运行,它们应该位于不同的映像中。另一个人建议在不同的容器中运行所有东西,因此 mysql、postfix、dovecot、spamassassin 等都将是单独的容器。他建议在这种情况下使用 --link 。这样做的好处是可以在不影响其他部分的情况下更换每一部分。 @Tauren 如果您环顾四周,您最终会收集到此类问题的所有可能答案。选择最适合你的。 @Moshe 同意你的观点,感谢你的意见 有时有充分的理由将事物分成多个容器,但 OP 没有提供足够的上下文来评估这种或另一种方式。【参考方案2】:

Dovecot、Spamassassin 等人可以在单独的容器中放入后缀。使用 LMTP 进行连接,一切都会奏效。这很实用。

现在谈谈意识形态。如果你真的想用“码头工人的方式”做事,那会是什么样子。

后缀是困难的。它不是一个守护进程,而是一组不同的守护进程,它们相互通信并执行邮件处理任务的不同部分。这些组件守护进程之间的交互有些是通过文件(例如邮件队列),有些是通过套接字,有些是通过信号。

当你启动 postfix 时,你真的启动了 'master' 守护进程,然后它使用 master.cf 中的规则启动它需要的其他守护进程。

在这种情况下,记录特别困难。所有不同的守护进程都独立地记录到 /dev/log,如果不将 syslog 守护进程放在容器中,就真的无法处理这些日志。 “不是码头工人的方式!”

基本上,postfix 中的功能划分是一种非常微服务的方法,但它不是基于容器化。你无法在 docker 下将不同的服务分离到不同的容器中,即使可以,对信号的依赖也是有问题的。

我想有可能重新设计“主”守护进程,使其能够访问主机中的 docker 进程(或在 docker 中运行 docker),因此这个新的主守护进程可以协调各种服务分开的容器。我们可以推测,但我没有听说有人将其作为一个实际项目进行。

这让我们更有可能选择在 docker 中使用比 postfix 更适合容器的守护进程。在过去的十年里,我或多或少地一直在使用 postfix,直到现在还没有太多的理由去查看选项。如果有人可以就可能对 docker 更友好的 MTA 选项添加评论,我会非常感兴趣?

【讨论】:

...这可能就是为什么没有“官方”后缀 docker 镜像的原因,我一直在使用github.com/catatnight/docker-postfix 我也将catatnight's image 用于出站中继等简单的事情,但它已多年未维护。 IT 不需要太多改变,但它确实需要建立在更新的操作系统上,安全补丁仍在发布中。

以上是关于将 Docker 用于邮件服务器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

什么是用于开发的好的邮件服务器? [关闭]

可用于测试和开发的本地 SMTP 服务器 - 实际上不会传递邮件 [关闭]

java可扩展的电子邮件通知应用程序[关闭]

一个简单的本地 SMTP 服务器 [关闭]

Docker部署ewomail邮件服务器

如何正确地从本地主机发送电子邮件 [关闭]