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

Docker for Mac下Python请求GCS模拟器IPv6报错如何强制走IPv4?

问题根因

你遇到的报错核心原因不是getaddrinfo patch失效,而是你使用的fake-gcs-server默认返回的可恢复上传地址直接使用了IPv6的未指定地址:::

  • fake-gcs-server在容器内默认监听::(IPv6所有地址),生成上传回调地址时会直接用监听地址作为host
  • GCS客户端拿到的上传目标直接是https://[::]:4443/xxx,此时你强制用IPv4地址族解析IPv6原生地址,自然会触发地址族不支持的报错

修复方案

第一步:修改docker-compose.yaml配置,指定fake-gcs-server的对外暴露地址

在gcs服务下新增启动参数,强制指定服务对外提供的地址为docker-compose网络内的服务域名,同时指定监听IPv4地址:

gcs:
    image: fsouza/fake-gcs-server:latest
    container_name: fake-gcs-server
    ports:
      - 4443:4443
    env_file: 
      - ./.env
    # 新增以下配置
    command: ["-scheme", "https", "-host", "0.0.0.0", "-port", "4443", "-external-url", "https://gcs:4443"]

参数说明:

  • -host 0.0.0.0:强制服务只监听IPv4地址,避免绑定IPv6的::
  • -external-url https://gcs:4443:告诉服务所有生成的回调/上传地址都用这个域名,不会再返回::作为host

第二步(可选):优化原有IPv4强制逻辑

如果你还需要兜底避免其他场景的IPv6请求,可把原来的patch逻辑调整为优先处理IPv6原生地址的情况:

def getaddrinfoIPv4(host, port, family=0, type=0, proto=0, flags=0):
    print(f'running patched getaddrinfo')
    # 兜底处理原生IPv6地址的情况
    if host == '::':
        host = 'gcs'
    return orig_getaddrinfo(host=host, port=port, family=socket.AF_INET, type=type, proto=proto, flags=flags)

改完后重启docker-compose服务即可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:30:00