我已经构建了本教程的基于 Docker 的“完美服务器”克隆,但更新了更新,并且我成功地通过 Roundcube 网络邮件应用程序在本地向外部电子邮件帐户发送和接收电子邮件,而无需使用外部中继。但是,我无法弄清楚为什么邮件客户端和邮件服务器之间的连接会不断失败。
首先,我的 docker-compose.yml 文件全局包含:
version: '3.0'
services:
mailserver:
container_name: mailserver
image: mailserver:latest
build: .
restart: on-failure
hostname: ${HOSTNAME}
domainname: ${DOMAIN}
ports:
- 80:80
- 25:25
- 143:143
- 465:465
- 587:587
- 993:993
- 995:995
environment:
- HOSTNAME=mail
- DOMAIN=localhost
- MYSQL_HOST=localhost
- MYSQL_PASSWORD=password
networks:
- default
networks:
default-network:
driver: bridge
最近,我构建了另一个镜像,其中包含一个独立的邮件服务器,它存在于 Postfix、Dovecot、Roundcube、PhpMyAdmin 和 Apache 之外,因为我想测试关于为什么邮件服务器和邮件客户端之间的连接失败的差异。
为此,我几乎安装了所有依赖项,并更改了一些 Postfix 值,例如:
postconf -e myhostname="${HOSTNAME}"
postconf -e mydomain="${DOMAIN}"
postconf -e mydestination="${HOSTNAME}, localhost.${DOMAIN}, localhost, ${DOMAIN}"
postconf -e mynetworks="127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128"
对于最后一张图片,我刚刚按照本教程将 Thunderbird 连接到邮件服务器。
注意:我使用(和测试)端口 143 和 25 的原因,但不会以最终形式使用它们。
但是发生了与“完美服务器”图像相同的事情,即客户端无法连接到邮件服务器。
同时,在构建该映像时,我按照完全相同的教程(完美服务器)在不使用容器(Debian 10)的情况下启动了一个虚拟机(相同的域、IP 地址和网络)。最后,我成功连接了 Outlook/Thunderbird(再次通过相同的端口)。
所以我得出的结论是,我错过了一些解决问题的方法,即即使端口打开并设置了 DNS 记录,Docker 容器也会阻止/阻止这些连接的原因。
问题:我做错了什么/为什么邮件客户端在 Docker 容器内时无法连接到邮件服务器?
完美的基于服务器的 Docker 镜像供参考:https ://github.com/jerob/docker-ispconfig