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

Docker部署Django无法访问外部API:域名解析失败求助

问题解决方案

核心原因

Docker容器的网络环境独立于宿主机,宿主机能正常解析的内网/自定义域名,容器内部可能缺少对应的DNS配置或hosts映射,从而导致域名解析失败。

解决方法

1. 用目标机器IP替换域名

将视图中的域名直接替换为API所在机器的实际IP,比如:

host='http://192.168.1.100:8190'

如果API运行在宿主机上:

  • Windows/macOS环境:可以用host.docker.internal替代IP,代码写成host='http://host.docker.internal:8190'
  • Linux环境:运行容器时添加参数--add-host host.docker.internal:host-gateway,之后代码里同样使用host.docker.internal

2. 给容器添加hosts映射

如果必须使用域名,可手动在容器内添加域名到IP的映射:

  • 命令行启动容器时:
    docker run --add-host my-host:192.168.1.100 [你的容器其他参数]
    
  • 使用docker-compose时,在配置文件中添加:
    services:
      your-django-service:
        # 其他已有配置
        extra_hosts:
          - "my-host:192.168.1.100"
    

3. 配置容器的DNS服务器

若域名通过内网DNS解析,给容器指定内网DNS服务器:

  • 命令行启动容器时:
    docker run --dns 192.168.1.1 [你的容器其他参数]
    
  • docker-compose配置:
    services:
      your-django-service:
        # 其他已有配置
        dns:
          - 192.168.1.1
    

4. 使用host网络模式(慎用)

让容器共享宿主机的网络栈,此时容器的域名解析规则和宿主机完全一致:

docker run --network host [你的容器其他参数]

注意:该模式下容器端口会直接占用宿主机端口,易引发端口冲突,且安全性较低,仅适合测试场景。

额外代码优化提醒

你的请求头中str({token})会生成{'My_Auth_Token'}这类不符合标准认证格式的字符串,建议根据API要求修改,比如Bearer Token格式:

hd = {'Authorization': f'Bearer {token}'}

如果是Token认证格式,改为:

hd = {'Authorization': f'Token {token}'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:30:01