安装 `privoxy` 将 Socks5 转换为 HTTP 代理

bash 复制代码
(base) shgbitai@shgbitai-C9X299-PGF:~/tools$ curl -x http://127.0.0.1:1080 https://registry-1.docker.io/v2/ 
curl: (56) Proxy CONNECT aborted
(base) shgbitai@shgbitai-C9X299-PGF:~/tools$ curl -x https://127.0.0.1:1080 https://registry-1.docker.io/v2/ 
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 127.0.0.1:1080 
(base) shgbitai@shgbitai-C9X299-PGF:~/tools$ curl -x socks5h://127.0.0.1:1080 https://registry-1.docker.io/v2/
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}
(base) shgbitai@shgbitai-C9X299-PGF:~/tools$ docker pull redis
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
(base) shgbitai@shgbitai-C9X299-PGF:~/tools$ 
  1. Socks5 代理工作正常

    • 使用 curl -x socks5h://127.0.0.1:1080 时,连接到 Docker 注册表的请求成功返回了 UNAUTHORIZED 错误。这是预期的,因为需要身份验证才能访问该资源。这表明 Socks5 代理正常工作。
  2. Docker 拉取镜像失败

    • 在你尝试使用 docker pull redis 时,出现了 context deadline exceeded 错误。这意味着 Docker 客户端无法成功通过代理连接到 Docker 注册表。

    这是因为 Docker 不直接支持 Socks5 代理,它只支持 HTTP/HTTPS 代理。你需要将 Docker 配置为使用 HTTP 代理,并且可以通过一种工具来把 Socks5 转换成 HTTP 代理。

解决问题的步骤:

1. 安装 privoxy 将 Socks5 转换为 HTTP 代理

由于 Docker 不支持直接使用 Socks5 代理,你可以使用 privoxy 工具将 Socks5 代理转换为 HTTP 代理。以下是步骤:

  1. 安装 privoxy

    bash 复制代码
    sudo apt update
    sudo apt install privoxy
  2. 配置 privoxy 使用 Socks5 代理

    打开 privoxy 配置文件:

    bash 复制代码
    sudo nano /etc/privoxy/config

    在文件末尾添加以下内容,配置 privoxy 使用 127.0.0.1:1080 作为 Socks5 代理:

    复制代码
    forward-socks5t / 127.0.0.1:1080 .
  3. 保存并重启 privoxy

    保存配置文件后,重启 privoxy 服务:

    bash 复制代码
    sudo systemctl restart privoxy

    现在,privoxy 应该会监听 HTTP 请求,并将其转发到 Socks5 代理。

2. 配置 Docker 使用 privoxy 提供的 HTTP 代理

接下来,你需要将 Docker 配置为使用 privoxy 提供的 HTTP 代理。默认情况下,privoxy 在端口 8118 监听 HTTP 请求。

  1. 配置 Docker 代理

    创建或编辑 Docker 的守护进程配置文件 /etc/systemd/system/docker.service.d/http-proxy.conf

    bash 复制代码
    sudo mkdir -p /etc/systemd/system/docker.service.d
    sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

    添加以下内容,将代理设置为 privoxy 提供的 HTTP 代理:

    ini 复制代码
    [Service]
    Environment="HTTP_PROXY=http://127.0.0.1:8118/"
    Environment="HTTPS_PROXY=http://127.0.0.1:8118/"
  2. 重启 Docker

    保存文件后,重启 Docker 服务使更改生效:

    bash 复制代码
    sudo systemctl daemon-reload
    sudo systemctl restart docker
  3. 验证配置

    你可以通过以下命令检查 Docker 是否正确应用了代理设置:

    bash 复制代码
    docker info | grep -i proxy

    如果配置正确,你应该能看到 HTTP_PROXYHTTPS_PROXY 的设置。

3. 重新尝试拉取镜像

现在,代理配置已经完成,你可以尝试再次拉取 Docker 镜像:

bash 复制代码
docker pull redis

这次应该能够通过 privoxy 代理来连接到 Docker 注册表并成功拉取镜像。


总结:

  • Socks5 代理 可以通过 curl 测试正常工作。
  • Docker 直接使用 Socks5 代理是不可行的,因此通过 privoxy 将 Socks5 代理转换为 HTTP 代理,并让 Docker 使用 HTTP 代理是解决方案。
相关推荐
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
wuyk5552 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
QYRdata2 天前
年均增速24.2%!机器人数据湖未来六年增长动能强劲
网络·机器人·服务发现
CHENKONG_CK2 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
chshang19922 天前
工业路由器是什么?浅谈5G工业网络中的IR602
网络·物联网·5g·智能路由器
萧瑟余晖2 天前
Netty 核心组件与 Reactor 模型详解
网络·架构
ITxiaobing20232 天前
IP 定位服务选型指南:从准确率到工程落地的技术考察
linux·服务器·网络
wuyk5552 天前
【Socket 进阶之路】第 9 章 Linux 网络服务量产稳定性优化|心跳保活、TIME_WAIT、SO_LINGER、内存池、断线重连、完整异常防护框架
linux·服务器·开发语言·网络·物联网
z落落2 天前
C#UDP+串口服务端+UDP 客户端(含 CRC16 校验)
网络·网络协议·udp
云运维笔记2 天前
华为设备IP地址配置全攻略
运维·网络·计算机网络·华为