You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose容器无法互访:跨容器SMTP连接问题求助

解决容器间SMTP连接问题的方案

1. 确认容器网络关联有效性

你已尝试将mailcowdockerized_mailcow-network设为外部网络,需确保Nextcloud和GitLab的Docker Compose配置正确关联该网络:

  • 以Nextcloud AIO为例,修改其docker-compose.yml:
    networks:
      mailcow-net:
        external: true
        name: mailcowdockerized_mailcow-network
    
    services:
      nextcloud-aio-mastercontainer:
        # 原有配置保持不变
        networks:
          - default
          - mailcow-net
    
  • 执行docker-compose up -d重启容器,确保服务成功加入目标网络。

2. 改用容器内部服务名而非公网域名

容器内访问Mailcow SMTP时,不要使用mail.domain.com(该域名会被解析到Nginx反向代理地址,绕了不必要的链路),直接用Mailcow内部的服务名:

  • Mailcow的SMTP服务由postfix容器提供,在Nextcloud和GitLab的SMTP配置中,将服务器地址改为postfix,端口保留587。
  • 进入容器内部验证连通性:执行telnet postfix 587或nc -zv postfix 587,确认能正常建立连接。

3. 检查Mailcow的SMTP监听范围

确保Mailcow的Postfix服务监听容器的所有网卡,而非仅localhost:

  • 进入Mailcow的postfix容器,查看/etc/postfix/main.cf中的inet_interfaces配置:
    inet_interfaces = all
    
  • 若配置为localhost,则容器间无法直接访问,需修改后重启Postfix容器。

4. 排查宿主机网络限制

  • 检查宿主机的iptables/ufw规则,确认未阻断容器间的587端口通信。
  • 临时关闭SELinux(执行setenforce 0)测试连接,若恢复正常,再调整SELinux策略允许容器间SMTP流量。

5. 验证容器内DNS解析

若坚持使用公网域名,需确认容器内mail.domain.com的解析结果是否指向Mailcow的postfix容器IP:

  • 进入容器执行nslookup mail.domain.com,若解析到宿主机公网IP,需调整容器DNS配置,或在容器内添加hosts映射:echo "POSTFIX_CONTAINER_IP mail.domain.com" >> /etc/hosts

内容的提问来源于stack exchange,提问作者nukaboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 00:56:12