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

Docker容器内发送邮件失败:出现名称解析错误

问题描述

在基于Ubuntu的Docker容器内运行以下Python邮件发送脚本时,出现socket.gaierror: [Errno -3] Temporary failure in name resolution错误,无法解析SMTP服务器域名mail.companyname.com。但在Windows宿主机上运行相同脚本可正常发送邮件,目标SMTP服务器未部署在本地。

使用的Python代码:

import smtplib
def send_email(from_addr="senderaddress@companyname.com", to_addrs="receiveraddress@companyname.com",
               msg="test Email"):
    mailserver = smtplib.SMTP('mail.companyname.com', 25)
    mailserver.ehlo()
    mailserver.starttls()
    mailserver.sendmail(from_addr, to_addrs, msg)
    mailserver.quit()

send_email()
可行解决办法
  • 检查Docker容器的DNS配置
    容器默认使用宿主机DNS,若配置异常可手动指定可信DNS服务器运行容器:

    docker run --dns 8.8.8.8 --dns 8.8.4.4 your-image-name
    

    或在docker-compose.yml中添加DNS配置:

    services:
      your-service:
        image: your-image-name
        dns:
          - 8.8.8.8
          - 8.8.4.4
    
  • 验证容器内的域名解析能力
    进入容器内部,用nslookup测试SMTP域名解析情况:

    docker exec -it your-container-name bash
    nslookup mail.companyname.com
    

    若解析失败,说明容器网络无法访问对应DNS服务器,需排查网络连通性(比如是否存在公司内网DNS限制、容器是否处于正确网络环境)。

  • 直接使用SMTP服务器IP替代域名
    在Windows宿主机通过nslookup mail.companyname.com获取服务器IP,替换代码中的域名:

    mailserver = smtplib.SMTP('x.x.x.x', 25)  # x.x.x.x为SMTP服务器实际IP
    
  • 调整容器网络模式
    默认bridge模式可能存在隔离问题,可尝试使用host网络模式运行容器(注意该模式下容器共享宿主机网络,可能存在端口冲突风险):

    docker run --network host your-image-name
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:15:34