Docker Swarm环境下PHPMailer报Invalid Host错误的排查与解决
Docker Swarm下PHPMailer连接Postfix容器报“invalid host”的解决方法
问题场景
在Docker Swarm环境部署集成PHPMailer的Open Journal System,包含php-fpm和postfix两个容器。php-fpm容器可通过Swarm配置的容器名foo_postfix访问postfix容器,能telnet到对应端口并通过bash发送邮件,但使用该容器名作为PHPMailer的主机名时,触发“invalid host”错误。
原因分析
查看代码发现主机名验证逻辑存在URL格式校验:
if (filter_var('http://' . $host, FILTER_VALIDATE_URL) !== false)
容器名foo_postfix包含下划线,拼接成http://foo_postfix后不符合URL主机名规范(URL主机名不允许下划线字符),因此验证失败报错。Docker Swarm容器默认域名格式为服务名.网络名(如foo_postfix.netName),但原容器名本身不满足校验要求。
解决方法
为postfix容器添加符合域名规范的网络别名,修改Swarm部署配置:
networks: netName: aliases: - foo.postfix - foo_postfix
配置完成后,在PHPMailer中使用foo.postfix作为主机名即可通过验证,同时保留原别名foo_postfix兼容其他访问场景。
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

