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

容器内Curl请求失败排查:Python服务跨容器访问403问题

问题分析与解决方案

从你提供的错误日志里能直接定位到问题根源:容器内的curl请求被系统代理拦截了。看这段关键日志:

* Uses proxy env variable http_proxy == 'http://10.223.4.20:911'

虽然你给容器设置了network_mode: host,容器里的localhost确实指向主机,但容器继承了主机的http_proxy环境变量,却没有像主机那样配置「忽略本地地址的代理规则」,导致请求被转发到代理服务器,最终返回403权限拒绝。

下面是几个可行的解决办法:

临时解决:curl命令跳过代理

在容器内执行curl时,加上--noproxy localhost参数,强制让这个请求不走代理:

curl --noproxy localhost --header "Content-Type: application/json" --data '{"uid":"admin","password":"admin"}' http://localhost:9000/auth

(注:--request POST可以省略,因为使用--data参数时curl会自动采用POST方法)

持久解决:给容器配置忽略代理的环境变量

在你的docker-compose.yml里,给需要访问本地服务的容器添加NO_PROXY环境变量,让它对localhost/127.0.0.1地址跳过代理。比如修改tts_driver的配置:

services:
  tts_driver:
    image: tts_driver
    privileged: true
    network_mode: host
    environment:
      - ASR_PUB_PORT=5555
      - ASR_PUB_TOPIC=subnlptopic
      - TTS_DRIVER_PUB_PORT=5556
      - TTS_DRIVER_PUB_TOPIC=pubttstopic
      - NO_PROXY=localhost,127.0.0.1  # 新增这一行
    command: python3 /app/TTSDriver.py

如果是其他需要执行curl的容器,同样添加这个环境变量即可。

彻底解决:取消容器的代理环境变量

如果你的容器不需要使用全局代理,可以直接在docker-compose里清空代理相关的环境变量:

environment:
  - http_proxy=
  - https_proxy=
  # 保留原来的其他环境变量

这样容器内的所有请求都不会走代理,自然能正常访问主机的localhost服务。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:37:35