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

178 天前
 KINGWAY

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

1476 次点击
所在节点    程序员
13 条回复
kk2syc
178 天前
在 docker-compose.yml 中配置端口映射了吗?

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

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

不过 465/587 以及多种证书加密组合都尝试过了, 不行.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1045227

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX