我正在 docker swarm 上配置使用 PHPMailer 的开放日志系统。我有两张图像,一张正在运行
php-fpm
,另一张正在运行 postfix
。从 php-fpm
,我可以使用 docker swarm 配置中声明的名称访问 postfix
,我什至可以 telnet 到已配置的端口 postfix(甚至可以从 bash 发送电子邮件)。
尽管如此,当我的主机名是
invalid host
(docker 容器的名称)时,PHPMailer 仍在抱怨 foo_postfix
。
可能发生什么事?
更新
查看代码,主机名是这样验证的
if (filter_var('http://' . $host, FILTER_VALIDATE_URL) !== false)
因此,它失败了。
那么,我可能只需要保证这些 docker 容器有一个域?也许 docker swarm 容器有一个默认域?
修复:
不将此作为答案发布,因为我认为这没有意义。但我通过向容器添加别名解决了问题:
networks:
netName
aliases:
- foo.postfix
- foo_postfix
这样 PHP 代码接受
foo.postfix
作为域名。
我们也有同样的问题。在 PHPMailer 代码中,我看到这个验证主机的正则表达式:
/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*|\[[a-fA-F0-9:]+\]):?([0-9]*)$/
不允许使用下划线字符。您的修复是正确的。您可以使用“.”。或“-”作为主机名的分隔符。