Docker 纯代理拉取镜像教程

彻底告别国内加速源,通过 Clash 代理直连 Docker Hub,享受极速、纯净的镜像拉取体验

🐳 Docker ⚡ Clash 代理 🐧 Kali / Linux 🔒 纯净官方源
🧠

为什么需要给 Docker 守护进程配代理?

普通的 export http_proxy 只对当前终端会话生效, 而 docker pull 拉取镜像的动作是由后台的 dockerd(Docker 守护进程)执行的。 所以必须为 Docker 服务单独配置代理环境变量。

🖥️ 终端
docker pull
🐳 dockerd
读取自己的代理配置
🌐 Clash 代理
192.168.29.1:8080
☁️ Docker Hub
registry-1.docker.io
1

创建 Docker 服务代理配置目录

使用 mkdir -p 创建专门存放 Docker 服务环境变量的 systemd 配置目录:

bash
mkdir -p /etc/systemd/system/docker.service.d
2

创建并编辑代理配置文件

在刚创建的目录下新建 http-proxy.conf 配置文件:

bash
nano /etc/systemd/system/docker.service.d/http-proxy.conf

在文件中写入以下内容:

/etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.29.1:8080"
Environment="HTTPS_PROXY=http://192.168.29.1:8080"
Environment="NO_PROXY=localhost,127.0.0.1,192.168.29.135"
💡
为什么要加 NO_PROXY?
防止 Docker 服务在访问本地容器(比如本地搭建的私有仓库或服务)时, 把流量错误地发给物理机代理导致连接失败。
请把 192.168.29.135 替换为你 Kali 机器的实际 IP 地址。
⌨️
操作提示:写好后按 Ctrl + O 保存, Enter 确认, 再按 Ctrl + X 退出。
3

刷新配置并重启 Docker 服务

让刚才配置的系统环境变量生效,并重新启动 Docker 守护进程:

bash
# 1. 重新加载 systemd 管理的系统服务配置
systemctl daemon-reload

# 2. 重启 Docker 服务
systemctl restart docker
🧪

验证代理是否生效

运行以下命令查看 Docker 的系统信息:

bash
docker info

拉到最下方,如果你看到了以下内容:

output
HTTP Proxy: http://192.168.29.1:8080
HTTPS Proxy: http://192.168.29.1:8080
说明 Docker 已经成功挂上了你物理机的 Clash 代理!
现在执行任何 docker pull 命令,Docker 都会避开所有国内加速源, 直接通过物理机代理向官方 Docker Hub 请求并下载镜像。
🗑️

清理国内加速源配置 强烈建议

既然已经配置好了纯代理直连官方源,保留原有的国内加速源不仅没有必要,反而可能带来麻烦。

对比维度保留加速源删除加速源(推荐)
请求延迟 ❌ 先尝试加速源 → 超时 → 回退官方源 ✅ 直连官方源,无额外等待
镜像版本 ⚠️ 可能拉到第三方缓存的旧版本 ✅ 100% 官方最新版本
可靠性 ⚠️ 国内镜像源经常停用或限制访问 ✅ 代理稳定可靠

🛠️ 操作步骤

1️⃣ 查看当前配置:

bash
cat /etc/docker/daemon.json

如果里面有 "registry-mirrors": [...] 这一段,就说明配置了加速源。

2️⃣ 编辑并清理:

bash
nano /etc/docker/daemon.json
📝
编辑指南:
• 如果里面只有加速源配置,直接清空内容,只保留 {}
• 如果还有其他配置(如 dnsinsecure-registries), 只删除 "registry-mirrors": [...] 这一行,注意保持 JSON 格式的逗号正确

3️⃣ 重启生效:

bash
systemctl daemon-reload
systemctl restart docker
🎉
大功告成!现在你的 Docker 处于「纯净 + 挂代理」的完美状态。 拉取镜像时 100% 通过 Clash 代理直连官方 Docker Hub,速度快且镜像纯净。
🔄

如何恢复默认(不需要代理时)

如果以后换了网络环境,不需要代理了,直接删除配置文件并重启服务:

bash
rm -f /etc/systemd/system/docker.service.d/http-proxy.conf
systemctl daemon-reload
systemctl restart docker

常见问题

请确认:
① 配置文件路径是否正确(检查有没有拼写错误);
② 是否执行了 systemctl daemon-reloadsystemctl restart docker
③ 代理地址是否能从 Kali 机器上连通 —— 试试 curl -I http://192.168.29.1:8080
直接重新编辑 /etc/systemd/system/docker.service.d/http-proxy.conf, 修改后重新执行 systemctl daemon-reload && systemctl restart docker 即可。
是的,必须开启。确保 Clash 开启了 Allow LAN(允许局域网连接)选项, 否则 Kali 虚拟机无法访问物理机的代理端口。在 Clash Verge 等客户端中通常是一个开关选项。
不需要。既然已经走了代理直连官方 Docker Hub,就完全不需要加速源了。 只有在代理不可用、必须走国内网络时,才需要把加速源加回来。