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

如何向Docker部署的API发送Retrofit2请求?请求失败求助

排查Android无法访问Docker部署的api.test.local的思路

遇到这个问题我之前也碰过,给你整理几个实际有效的排查方向:

  • 先确认DNS解析是否正常
    Postman能正常访问大概率是因为你的开发机hosts文件里已经配置了api.test.local到Docker容器/主机IP的映射,但Android设备并没有这个映射。你可以通过adb shell进入Android终端,执行ping api.test.local,如果返回“unknown host”,那就是DNS解析的问题。
    解决办法:要么给Android设备添加hosts映射(需要root权限,或者用一些无需root的hosts修改工具),要么直接用Docker容器的实际IP地址发起请求测试,比如http://192.168.xxx.xxx:端口,如果能通,就坐实了DNS的问题。

  • 检查Docker的网络模式配置
    如果你的Docker用的是默认的bridge模式,容器的IP是Docker内部网段的,Android设备在局域网里可能无法直接通过主机名访问。可以试试这两个调整:

    1. 切换Docker网络为host模式(启动容器时加--network host),这样容器会直接使用主机的网络端口,局域网设备就能通过主机IP/主机名访问了(注意避免端口冲突);
    2. 给容器分配固定的局域网IP,确保Android设备和容器在同一网段,然后直接用这个IP访问测试。
  • 排查Android的网络权限与安全限制

    1. 先确认AndroidManifest.xml里已经添加了网络权限:
      <uses-permission android:name="android.permission.INTERNET" />
      
    2. 如果你用的是HTTP协议(不是HTTPS),Android 9及以上默认会拦截明文流量。需要在res/xml/network_security_config.xml中添加配置允许该域名的明文访问:
      <?xml version="1.0" encoding="utf-8"?>
      <network-security-config>
          <domain-config cleartextTrafficPermitted="true">
              <domain includeSubdomains="true">api.test.local</domain>
          </domain-config>
      </network-security-config>
      
      然后在AndroidManifest.xml的application标签里引用这个配置:
      android:networkSecurityConfig="@xml/network_security_config"
      
  • 检查主机的防火墙规则
    开发机的防火墙可能允许本地(Postman)访问,但拦截了来自局域网(Android设备)的请求。你可以临时关闭防火墙测试,如果能访问了,就需要在防火墙里添加规则,开放应用对应的端口,允许局域网内的设备访问。

  • 确认后端服务的监听地址
    有时候容器里的后端服务可能只绑定了127.0.0.1,这样只有容器内部能访问,即使端口映射了,外部也无法连接。你需要检查服务的配置文件,确保监听地址是0.0.0.0,比如:

    • 如果是Nginx,配置里的listen要写成listen 0.0.0.0:80;
    • 如果是Java/Node.js服务,启动时要绑定0.0.0.0而不是localhost

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:49:59