Linux 与 Docker 代理配置全指南

auther: abinng date: 2026-03-11 17:01 createDate:2026-03-11 17:01

Windows 宿主机配置

首先要确保你的 Clash 允许来自局域网的连接,并找到宿主机的局域网 IP。

  1. 开启局域网共享:

    • 打开 Clash Verge。
    • 设置 (Settings) 或主界面中,找到 允许局域网 (Allow LAN) 开关,确保它是 开启 状态。
    • 查看代理端口,通常是 78907897(Clash Verge 默认通常是 7897)。
  2. 获取宿主机 IP 地址:

    • 在 Windows 上打开终端(CMD 或 PowerShell),输入 ipconfig
    • 找到你的物理网卡(通常是“以太网适配器”或“无线局域网适配器”)的 IPv4 地址
    • 注意: 如果你使用的是 WSL2,IP 地址通常在 vEthernet (WSL) 适配器下。

配置终端代理

打开配置文件

1
vi ~/.bashrc

将下面内容加入到末尾,记得修改ip和代理监听端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# ==========================================
# 终端代理快捷开关 (Proxy Alias)
# ==========================================
# 定义你的宿主机 IP 和 Clash 端口
export HOST_PROXY_IP="192.168.x.x"
export HOST_PROXY_PORT="7897"
export PROXY_URL="http://$HOST_PROXY_IP:$HOST_PROXY_PORT"

# 1. 开启代理
function proxy() {
export http_proxy="$PROXY_URL"
export https_proxy="$PROXY_URL"
export all_proxy="$PROXY_URL"
export HTTP_PROXY="$PROXY_URL"
export HTTPS_PROXY="$PROXY_URL"
export ALL_PROXY="$PROXY_URL"
export no_proxy="localhost,127.0.0.1,::1"
echo -e "终端代理已开启: $PROXY_URL"
}

# 2. 关闭代理
function unproxy() {
unset http_proxy
unset https_proxy
unset all_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
unset ALL_PROXY
unset no_proxy
echo -e "终端代理已关闭"
}

# 3. 检查代理状态与连通性
function checkproxy() {
echo -e "当前代理环境变量:"
echo "http_proxy = $http_proxy"
echo "https_proxy = $https_proxy"
echo "---------------------------"
echo "正在测试访问 Google..."

# 使用 curl 测试连通性,设置 5 秒超时,只输出 HTTP 状态码
HTTP_STATUS=$(curl -I -s -m 5 -o /dev/null -w "%{http_code}" https://www.google.com)

if [ "$HTTP_STATUS" == "200" ]; then
echo -e "测试结果: 成功连通外网!(HTTP $HTTP_STATUS)"
elif [ "$HTTP_STATUS" == "000" ]; then
echo -e "测试结果: 连接超时或失败。请检查宿主机 IP 是否正确,以及 Clash 局域网连接是否开启。"
else
echo -e "测试结果: 状态异常 (HTTP $HTTP_STATUS)"
fi
}

保存并刷新配置

1
source ~./bashrc

日常使用方法:

  • 平时不代理: 打开终端,正常用,完全不影响你访问国内源。
  • 遇到墙了: 比如 git clone 卡住了,直接输入 proxy,回车。
  • 检查一下: 不确定代没代理上?输入 checkproxy,它会告诉你当前的环境变量并 ping 一下 Google 确认。
  • 用完关掉: 下载完了,输入 unproxy,回车,恢复直连。

配置 Docker 镜像拉取代理

Docker 镜像拉取常常出现网络问题,配置的镜像源又不稳定,需要经常换,很麻烦。

我们可以在 Linux 虚拟机中通过宿主机的 Clash Verge 下载 Docker 镜像


方法一、写死配置

Docker 的镜像拉取是由 Docker Daemon 后台进程完成的,因此直接在终端 export 环境变量往往对 docker pull 无效。最标准的方法是创建 systemd 配置。

  1. 创建配置目录:
1
sudo mkdir -p /etc/systemd/system/docker.service.d
  1. 创建代理配置文件:

    使用编辑器创建一个名为 http-proxy.conf 的文件:

1
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
  1. 写入以下内容:

    请将 192.168.x.x 替换为你刚才查到的 Windows 宿主机 IP,将 7897 替换为你的 Clash 端口

1
2
3
4
[Service]
Environment="HTTP_PROXY=http://192.168.x.x:7897"
Environment="HTTPS_PROXY=http://192.168.x.x:7897"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
  1. 保存并重启 Docker:
1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

方法二、脚本开关

这个不推荐,因为代价太大了,每次使用都需要重启服务

将下面这段添加到 ~/.bashrc 中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 开启 Docker Daemon 代理
function dockerproxy() {
sudo mkdir -p /etc/systemd/system/docker.service.d
# 直接用 echo 覆盖写入配置
echo -e '[Service]\nEnvironment="HTTP_PROXY=http://192.168.x.x:7897"\nEnvironment="HTTPS_PROXY=http://192.168.x.x:7897"\nEnvironment="NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"' | sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf > /dev/null
sudo systemctl daemon-reload
sudo systemctl restart docker
echo "Docker 守护进程代理已开启!"
}

# 关闭 Docker Daemon 代理
function undockerproxy() {
sudo rm -f /etc/systemd/system/docker.service.d/http-proxy.conf
sudo systemctl daemon-reload
sudo systemctl restart docker
echo "Docker 守护进程代理已关闭!"
}

验证配置是否成功

执行以下命令查看 Docker 的环境变量:

1
docker info | grep Proxy

如果你看到输出中包含了你设置的 IP 和端口,说明配置已生效。现在尝试 docker pull 一个镜像,速度应该会显著提升。

配置 Docker 容器运行代理

如果你的容器内部程序需要访问外网(例如在容器内执行 apt-get 下载软件包,或者容器内的 Node/Python 脚本调用外部 API),有以下两种常见方法:

方法一:全局配置(推荐) 在宿主机当前用户的家目录下创建或修改 Docker 客户端配置文件。这会自动为所有新启动的容器注入代理环境变量。

  1. 创建并编辑配置文件:
1
2
mkdir -p ~/.docker
nano ~/.docker/config.json
  1. 写入以下配置(请替换 IP 和端口为你自己的配置):
1
2
3
4
5
6
7
8
9
{
"proxies": {
"default": {
"httpProxy": "http://192.168.x.x:7897",
"httpsProxy": "http://192.168.x.x:7897",
"noProxy": "localhost,127.0.0.1,.example.com"
}
}
}

注意: 此配置只对修改后新创建的容器生效,不会影响已经在运行的容器。

方法二:临时指定(单次运行) 如果你不想全局配置,只想在某次启动容器时使用代理,可以在 docker run 命令中直接通过 -e 传入环境变量:

1
docker run -e HTTP_PROXY="http://192.168.x.x:7897" -e HTTPS_PROXY="http://192.168.x.x:7897" -it ubuntu bash

Docker 构建镜像代理

当我们在编写 Dockerfile 并使用 docker build 制作镜像时,通常会执行 RUN apt-get updateRUN pip install 等联网命令。此时也需要配置代理。

方法:使用 --build-arg 参数 在执行 build 命令时临时传入构建参数:

1
2
3
4
docker build \
--build-arg HTTP_PROXY="http://192.168.x.x:7897" \
--build-arg HTTPS_PROXY="http://192.168.x.x:7897" \
-t my-app:latest .

提示: 如果你在上一步中已经配置了 ~/.docker/config.json,那么 docker build 会自动读取并使用该代理配置,你就不需要每次手动添加 --build-arg 了。

常见问题排查 (Troubleshooting)

如果依然无法连接,请检查以下两点:

  • Windows 防火墙: Windows 防火墙可能会拦截来自虚拟机的入站流量。

    • 简单测试: 暂时关闭 Windows 防火墙看是否能通。
    • 正确做法: 在“高级安全 Windows 防火墙”中,为 Clash Verge 所在的端口(如 7897)添加一条 入站规则,允许 TCP 连接。
  • 虚拟机网络模式:

    • 如果是 NAT 模式,直接使用宿主机 IP 通常没问题。
    • 如果是 桥接模式,请确保宿主机和虚拟机在同一个网段。
  • Clash 内部设置: 确保 Clash 没有开启“仅限本机”之类的严格访问控制。