我已经设置了一个带有两个 Docker 容器的 Debian Web 服务器:
- 一个 laradock 容器(laradock.io - 文档可在laradock.io)。
- 一个 mailcow 容器(mailcow.email- 提供文档这里)
我首先设置了 laradock 容器,目前,在运行服务时caddy, mysql, php-fpm and workspace
,docker 在我的系统上保留了以下端口(lsof -i -n -P
):
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 11641 root 4u IPv6 354251 0t0 TCP *:3306 (LISTEN)
docker-pr 11848 root 4u IPv6 355207 0t0 TCP *:2222 (LISTEN)
docker-pr 12229 root 4u IPv6 356964 0t0 TCP *:443 (LISTEN)
docker-pr 12241 root 4u IPv6 357019 0t0 TCP *:80 (LISTEN)
docker-pr 13809 root 4u IPv4 367743 0t0 TCP 127.0.0.1:19991 (LISTEN)
docker-pr 13837 root 4u IPv4 367839 0t0 TCP 127.0.0.1:13306 (LISTEN)
docker-pr 13890 root 4u IPv6 368035 0t0 TCP *:4190 (LISTEN)
docker-pr 13913 root 4u IPv6 368092 0t0 TCP *:995 (LISTEN)
docker-pr 13949 root 4u IPv6 368179 0t0 TCP *:993 (LISTEN)
docker-pr 13975 root 4u IPv6 368244 0t0 TCP *:143 (LISTEN)
docker-pr 13989 root 4u IPv6 368290 0t0 TCP *:110 (LISTEN)
debian-compose up -d
当我尝试在安装了所有 mailcut 文件的目录中运行 mailcat-dockerized 时,遇到了以下问题:
[...] Mailcat/NGINX: Bind for 0.0.0.0:443 failed: port is already allocated [...]
[...] Mailcat/POSTFIX: Error starting userland proxy: listen tcp 0.0.0.0:25: bind: address already in use
当查看我的其他条目时lsof -i -n -P
,发现失败的原因如下:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
exim4 3050 Debian-exim 3u IPv4 17648 0t0 TCP 127.0.0.1:25 (LISTEN)
exim4 3050 Debian-exim 4u IPv6 17653 0t0 TCP [::1]:25 (LISTEN)
docker-pr 12229 root 4u IPv6 356964 0t0 TCP *:443 (LISTEN)
Debian 预装的邮件程序exim
保留了端口 25 用于监听邮件,而我的 laradock 容器caddy
(一个类似 nginx 的服务器,具有更简单的 ssl)(当然)使用端口 443。
在 Mailcat-config 文件中,我可以将其 nginx 服务器的端口更改为其他端口,还可以更改 smtp 端口。
就我而言,我仍然需要exim4
,所以我绝不会将其从我的系统中删除。我需要它,以便每次有人成功在我的系统上进行 ssh 登录时,我都可以发送邮件。我可以更改它的端口或 mailcat 用于 SMTP 的端口,但我不确定这会如何影响发送/接收邮件,尤其是在同时安装两个邮件收件人(exim 和 mailcow)时。我无法通过 mailcow 发送我的 ssh 登录邮件,因为它在 dockerized 容器中。
我已将 mailcow 的主机名/FQDN 设置为 mail.mydomain.com,我认为这将省去更改 caddy/nginx 端口绑定的麻烦,因为我的带有 caddy 的 laradock 容器只监听 mydomain.com 和 www.mydomain.com ,而不是 mail.mydomain.com。
如果我无论如何都要更改我的某个服务的端口,我应该将其更改为哪个端口(我应该更改我的 caddy 还是 nginx 配置 - 我会选择 nginx,因为 caddy 正在提供我的 Web 内容,因此更重要)。我如何告诉 caddy 将所有对 mail.mydomain.com 的请求重定向到另一个容器中的 nginx?
我很高兴能得到任何答案。