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

Docker容器中Django发送邮件报错(Cannot assign requested address)解决方法

Docker环境下Django发送SMTP邮件报错[Errno 99] Cannot assign requested address的解决方法

核心问题分析

OSError: [Errno 99] Cannot assign requested address本质是网络连通性问题,结合本地正常、Docker环境异常的现象,重点排查容器网络配置、SMTP访问权限及配置正确性。


具体排查与解决步骤

1. 检查容器网络连通性

  • 进入容器内部,直接测试SMTP服务器的可达性:
    docker exec -it 你的容器名称 bash
    # 测试SMTP主机连通性(替换为你的SMTP服务器地址)
    telnet smtp.bk.ru 587
    # 或用ping测试DNS解析
    ping smtp.bk.ru
    
    如果无法连通,说明容器没有出站访问SMTP服务器的权限:
    • 检查宿主机防火墙/安全组,是否允许容器IP段访问SMTP端口(常见587、465、25);
    • 尝试切换容器网络模式为host(运行容器时添加参数--network=host),绕过Docker NAT网络直接使用宿主机网络。

2. 验证SMTP配置准确性

  • 确认settings.py中的邮件配置与本地正常环境完全一致,重点检查:
    EMAIL_HOST = 'smtp.bk.ru'  # 不要设为localhost/127.0.0.1(容器内localhost指向自身,而非宿主机)
    EMAIL_PORT = 587
    EMAIL_USE_TLS = True
    EMAIL_HOST_USER = 'volkodav2312@bk.ru'
    EMAIL_HOST_PASSWORD = '你的邮箱密码'
    
  • 如果SMTP服务部署在宿主机,容器内不要用127.0.0.1,改用宿主机的局域网IP,或host.docker.internal(Docker Desktop适用,Linux环境需额外配置Docker允许该域名解析)。

3. 排查DNS解析问题

  • 如果SMTP主机名无法解析,在容器内手动指定DNS服务器:
    # 运行容器时添加DNS参数
    docker run --dns=8.8.8.8 你的镜像名称
    
    或在容器内测试解析:
    nslookup smtp.bk.ru
    

4. 直接测试SMTP连接(排除Django封装问题)

在容器的Python环境中直接用smtplib测试,定位问题是否出在Django层:

import smtplib
try:
    smtp_obj = smtplib.SMTP('smtp.bk.ru', 587)
    smtp_obj.starttls()
    smtp_obj.login('volkodav2312@bk.ru', '你的邮箱密码')
    smtp_obj.sendmail('volkodav2312@bk.ru', 'volkodav2312@inbox.ru', 'Test message from Docker')
    smtp_obj.quit()
    print("邮件发送成功")
except Exception as e:
    print(f"报错:{str(e)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:10:53