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

Docker容器API请求IP地址问题:Python请求失败浏览器正常

问题排查与解决步骤

1. 核对Python请求的目标地址

  • 浏览器能用http://127.0.0.1:5000/Ping正常访问,但Python代码里如果写了http://0.0.0.0:5000/Ping可能出问题——虽然浏览器能解析0.0.0.0到本地,但requests库在部分环境下对0.0.0.0的处理存在兼容性问题,强制改用127.0.0.1:5000重试。
  • 仔细检查代码里的拼写:比如是否把Ping写成小写ping,或者端口号误输成5001这类错误值。

2. 排查本地防火墙/安全软件拦截

  • 浏览器一般会被防火墙默认放行,但Python脚本可能被拦截。临时关闭本地防火墙、杀毒软件后,重新运行requests请求测试。
  • 若为Windows系统,进入「Windows Defender防火墙」的「允许应用通过防火墙」设置,确认Python.exe已被允许访问网络。

3. 区分Python脚本的运行环境

  • 如果Python脚本是在Django容器内部运行的,不能用127.0.0.1访问.NET容器——容器内部的回环地址指向自身,而非宿主机。此时需改用docker-compose中.NET服务的名称(比如服务名为net-api,则请求地址应为http://net-api:80/Ping)。
  • 若脚本在宿主机运行,继续往下排查。

4. 验证宿主机到容器的连通性

  • 用宿主机命令行工具直接测试:
    • Windows:执行Test-NetConnection 127.0.0.1 -Port 5000或telnet 127.0.0.1 5000
    • Linux/macOS:执行curl http://127.0.0.1:5000/Ping或nc -zv 127.0.0.1 5000
  • 如果这些命令也无法连通,说明端口映射存在隐性问题;如果能连通,问题则出在Python环境本身。

5. 检查Python环境的代理设置

  • 若Python环境被配置了代理,请求会被转发到错误地址。可以在请求中强制禁用代理:
    import requests
    proxies = {
      'http': None,
      'https': None,
    }
    response = requests.get('http://127.0.0.1:5000/Ping', proxies=proxies)
    print(response.text)
    
  • 同时检查系统环境变量中的HTTP_PROXY、HTTPS_PROXY,确认是否被意外设置。

6. 确认.NET容器的服务监听地址

  • 虽然docker-compose映射了80端口,但.NET应用本身可能仅监听容器内部的127.0.0.1:80,而非0.0.0.0:80。这种情况下容器内部可访问,但宿主机映射后会出现异常。
  • 执行docker exec <容器ID> netstat -tulpn查看容器内的监听端口,确认是否为0.0.0.0:80在监听。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:50:23