Docker容器通过Tor网络发起请求时遇连接拒绝问题求助
问题原因
容器内的127.0.0.1指向容器自身的网络栈,而非宿主机上运行的Privoxy服务,所以容器无法连接到代理。宿主机上的curl能正常工作是因为它直接访问的是宿主机本地的Privoxy。
解决方法
方法1:使用宿主机IP或Docker专属别名
- 若使用Docker Desktop(Windows/macOS),可直接用官方提供的宿主机别名
host.docker.internal替换127.0.0.1:docker run --rm --env HTTP_PROXY=http://host.docker.internal:8118 --env HTTPS_PROXY=http://host.docker.internal:8118 basic_ip_docker - 若使用Linux Docker,先查看宿主机的局域网IP(比如
192.168.1.100),替换为该IP后运行容器:docker run --rm --env HTTP_PROXY=http://192.168.1.100:8118 --env HTTPS_PROXY=http://192.168.1.100:8118 basic_ip_docker
方法2:修改Privoxy配置允许Docker子网访问
默认Privoxy仅监听127.0.0.1,需调整配置开放外部访问:
- 打开Privoxy配置文件(通常路径为
/etc/privoxy/config) - 找到
listen-address项,将其从127.0.0.1:8118修改为0.0.0.0:8118(允许所有IP访问),或指定Docker默认子网(如172.17.0.0/16):listen-address 0.0.0.0:8118 - 重启Privoxy服务:
sudo systemctl restart privoxy - 之后用宿主机IP或
host.docker.internal运行容器即可。
方法3:用Docker Compose统一管理服务(推荐)
将Privoxy/Tor和业务容器放在同一Docker网络中,避免IP依赖:
- 创建
docker-compose.yml文件:version: '3' services: privoxy: image: privoxy/privoxy:latest ports: - "8118:8118" depends_on: - tor tor: image: torproject/tor:latest command: tor --SocksPort 9050 app: build: . # 指向你的业务容器Dockerfile路径 environment: - HTTP_PROXY=http://privoxy:8118 - HTTPS_PROXY=http://privoxy:8118 depends_on: - privoxy - 运行服务:
docker-compose up --build
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

