linux系统中的docker经由路由器中的Clash科学上网

在linux中使用:

启用路由器的代理 , 通常是

http://192.168.9.1:7890

密码(代理认证信息)一般可在界面中获取,如

Clash:nSik86ew

将上述组合起来就可以在linux中访问

curl -v -x http://Clash:nSik86ew@192.168.9.1:7890 https://www.google.com

临时设置带认证的环境变量

在你的 Linux 终端里,使用如下命令(注意用户名和密码大小写):

export http_proxy="http://Clash:nSik86ew@192.168.9.1:7890"
export https_proxy="http://Clash:nSik86ew@192.168.9.1:7890"
export all_proxy="http://Clash:nSik86ew@192.168.9.1:7890"

这样,终端里大部分支持代理的命令(如 curl、wget、pip、apt 等)都会走代理,并自动携带认证信息。

永久设置

将上面三行加到你的 ~/.bashrc 或 ~/.zshrc 文件末尾,然后执行 source ~/.bashrc 或重启终端即可。

在linux中的Docker中使用:

Docker daemon 默认不会读取 shell 的 http_proxy 环境变量
需要专门配置 Docker 的代理。

直接用 shell 的 http_proxy/https_proxy 环境变量对 docker pull无效的**,因为:

  • docker pull 实际上是由 Docker daemon(后台服务) 发起的网络请求,而不是你的 shell 进程。
  • Docker daemon 不会自动继承你 shell 里的环境变量。

正确让 docker pull 走 HTTP 代理的方法

1. 配置 Docker daemon 的代理(推荐)

假设你的代理信息如下:

  • 代理服务器:192.168.9.1
  • 端口:7890
  • 用户名:Clash
  • 密码:nSik86ew

步骤如下:

  1. 新建配置目录
   sudo mkdir -p /etc/systemd/system/docker.service.d
  1. 新建代理配置文件
   sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
   [Service]
   Environment="HTTP_PROXY=http://Clash:nSik86ew@192.168.9.1:7890/"
   Environment="HTTPS_PROXY=http://Clash:nSik86ew@192.168.9.1:7890/"
   EOF
  1. 重载 systemd 并重启 Docker
   sudo systemctl daemon-reload
   sudo systemctl restart docker
  1. 验证代理配置
   docker info | grep -i proxy

应该能看到你刚刚设置的代理地址。

  1. 重新拉取镜像
   docker pull questdb/questdb:nightly-rhel

其他说明

  • 如果代理用户名或密码有特殊字符(如 @:),需要进行URL编码
  • 如果你在用 root 用户,操作方法一样。
  • 如果你有多个 Docker 配置文件(比如 /etc/docker/daemon.json),也可以在里面设置 "proxies" 字段,但推荐 systemd 方式,兼容性更好。

总结

docker pull 不能直接用 shell 的 http_proxy 环境变量,必须为 Docker daemon 配置代理。