V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KINGWAY
V2EX  ›  程序员

docker 容器内应用链接远程邮件服务器问题

  •  
  •   KINGWAY · 19 天前 · 1158 次点击

    1.我的 PVE 中(192.168.1.99/24, 网关 192.168.1.1)

    直接跑了个 docker 应用并创立了自己的网络 invoiceninja_invoiceninja (网段 172.27.0.0/16, 网关 172.27.0.1)

    1. 同时在 docker-compose.yml 中指定了外部网络如下: networks:

      • invoiceninja extra_hosts:
      • "in5.localhost:192.168.1.99 " #host and ip
    2. 同时参考了这个帖子 https://www.v2ex.com/t/1042150 在 PVE 宿主机中增加了对应的邮件 smtp 端口, 但是容器中仍然无法链接远程 smtp 邮件服务器, 我该怎么做?

    root@datahub:~# ufw allow from 172.27.0.0/16 to any port 25 Rules updated root@datahub:~# ufw allow from 172.27.0.0/16 to any port 587 Rules updated root@datahub:~# ufw allow from 172.27.0.0/16 to any port 465 Rules updated

    上述 docker 容器内和 PVE 宿主都开了 ipv4 转发.

    最后容器中运行 netstat -tln 如下. "/var/www/app # netstat -tln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 127.0.0.11:34747 0.0.0.0:* LISTEN
    tcp 0 0 :::9000 :::* LISTEN "

    PVE 宿主机中运行 netstat -tln 如下: (这是因为宿主机的 25/587/465smtp 相关端口没打开的原因吗?

    root@datahub:/opt/invoiceninja/invoiceninja# netstat -tln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:8384 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:85 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:52345 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:20172 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:20171 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:20170 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:35143 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:52283 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:3939 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:3838 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:7564 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:22000 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:22222 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:5005 0.0.0.0:* LISTEN
    tcp6 0 0 :::10000 :::* LISTEN
    tcp6 0 0 :::8384 :::* LISTEN
    tcp6 0 0 :::9000 :::* LISTEN
    tcp6 0 0 :::52283 :::* LISTEN
    tcp6 0 0 :::3128 :::* LISTEN
    tcp6 0 0 :::3306 :::* LISTEN
    tcp6 0 0 :::3939 :::* LISTEN
    tcp6 0 0 :::3838 :::* LISTEN
    tcp6 0 0 :::2222 :::* LISTEN
    tcp6 0 0 :::3000 :::* LISTEN
    tcp6 0 0 :::2017 :::* LISTEN
    tcp6 0 0 :::111 :::* LISTEN
    tcp6 0 0 :::22 :::* LISTEN
    tcp6 0 0 :::7564 :::* LISTEN
    tcp6 0 0 :::8006 :::* LISTEN
    tcp6 0 0 :::8080 :::* LISTEN
    tcp6 0 0 :::6565 :::* LISTEN
    tcp6 0 0 :::22000 :::* LISTEN
    tcp6 0 0 :::22222 :::* LISTEN
    tcp6 0 0 :::5005 :::* LISTEN
    tcp6 0 0 ::1:25 :::* LISTEN

    第 1 条附言  ·  18 天前
    测试远程邮件服务器一直会出现

    Connection could not be established with host "mx.yourdomain.com:587": stream_socket_client(): Unable to connect to mx.yourdomain.com:587 (Operation timed out)

    Connection could not be established with host "ssl://mx.yourdomain.com:465": stream_socket_client(): Unable to connect to ssl://mx.yourdomain.com:465 (Operation timed out)

    看起来都是无法连接到远程服务器导致.
    第 2 条附言  ·  18 天前
    https://invoiceninja.github.io/en/self-host-installation/ 我跑的项目是这个, 各位可以自己测试下看看.
    第 3 条附言  ·  18 天前
    我很怀疑自己的邮件服务器出问题了, 但是一直在正常使用超过 3 年了.

    root@datahub:~# lsof -i tcp:587
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    docker-pr 1869490 root 4u IPv4 9346392 0t0 TCP *:submission (LISTEN)
    docker-pr 1869497 root 4u IPv6 9355388 0t0 TCP *:submission (LISTEN)
    root@datahub:~# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    69a729725d7f nginx "/docker-entrypoint.…" 27 minutes ago Up 27 minutes 0.0.0.0:465->465/tcp, :::465->465/tcp, 0.0.0.0:587->587/tcp, :::587->587/tcp, 0.0.0.0:3939->80/tcp, :::3939->80/tcp invoiceninja-server-1
    13 条回复
    kk2syc
        1
    kk2syc  
       19 天前
    在 docker-compose.yml 中配置端口映射了吗?

    ```YML
    services:
    app:
    image: your-image
    ports:
    - "25:25"
    ```
    KINGWAY
        2
    KINGWAY  
    OP
       19 天前
    @kk2syc #1 配置了

    ```
    ports:
    - "3939:80"
    - "587:587"
    - "25:25"
    - "465:465"
    ```
    stevenshuang
        3
    stevenshuang  
       19 天前 via iPhone
    不太清楚 PVE 。但是看你 docker 加了 192 的那个 IP ,你应该是想访问 192 的 25 ,456 端口,从你的 pve 的 netstat 看,你的 25 端口绑定在 127.0.0.1 和::1 上了,没有 456 的监听端口,你可以试试让你的邮件服务监听 0.0.0.0
    kkk9
        4
    kkk9  
       19 天前
    pve 对虚拟机的安全组(包括宿主机的防火墙安全组)是否放行对应端口?优先测试 465 ,考虑到你的物理网络运营商可能封 25 端口了
    KINGWAY
        5
    KINGWAY  
    OP
       19 天前
    @kkk9 #4 我是链接远程邮件服务器来发送通知邮件, 而不是 docker 做邮件服务器, 所以 25 端口封不封无所谓.
    KINGWAY
        6
    KINGWAY  
    OP
       19 天前
    @stevenshuang #3 PVE 就是 debian,
    iyiluo
        7
    iyiluo  
       19 天前
    先试试把 network 换成 host ,排除主机连接邮件服务器的问题
    miscnote
        8
    miscnote  
       19 天前
    多半是你的出站 smtp 连接被封了。
    KINGWAY
        9
    KINGWAY  
    OP
       19 天前
    @miscnote #8 不一定, PVE 宿主机上 telnet 远程邮件服务器没问题.
    KINGWAY
        10
    KINGWAY  
    OP
       19 天前
    @iyiluo #7 其实我考虑过这个问题, 但是你看到 docker-compose.yml 文件中下面设置, 应该没问题吧.
    invoiceninja extra_hosts:
    "in5.localhost:192.168.1.99 " #host and ip
    defunct9
        11
    defunct9  
       19 天前
    这种问题不可能出现啊,啥都不配,直接跑 docker ,容器内禁止访问外部 25 端口,不可能啊
    masterclock
        12
    masterclock  
       19 天前
    465 的话,是不是证书问题?
    KINGWAY
        13
    KINGWAY  
    OP
       18 天前
    @masterclock #12 远程自建服务器用的是 mailcow, https://docs.mailcow.email/client/client-manual/

    不过 465/587 以及多种证书加密组合都尝试过了, 不行.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2929 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:12 · PVG 22:12 · LAX 07:12 · JFK 10:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.