🧠
为什么需要给 Docker 守护进程配代理?
普通的 export http_proxy 只对当前终端会话生效,
而 docker pull 拉取镜像的动作是由后台的 dockerd(Docker 守护进程)执行的。
所以必须为 Docker 服务单独配置代理环境变量。
🖥️ 终端
→
docker pull
→
🐳 dockerd
读取自己的代理配置
→
读取自己的代理配置
🌐 Clash 代理
192.168.29.1:8080
→
192.168.29.1:8080
☁️ Docker Hub
registry-1.docker.io
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 服务在访问本地容器(比如本地搭建的私有仓库或服务)时, 把流量错误地发给物理机代理导致连接失败。
请把
防止 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
编辑指南:
• 如果里面只有加速源配置,直接清空内容,只保留
• 如果还有其他配置(如
• 如果里面只有加速源配置,直接清空内容,只保留
{}• 如果还有其他配置(如
dns 或 insecure-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
❓
常见问题
请确认:
① 配置文件路径是否正确(检查有没有拼写错误);
② 是否执行了
③ 代理地址是否能从 Kali 机器上连通 —— 试试
① 配置文件路径是否正确(检查有没有拼写错误);
② 是否执行了
systemctl daemon-reload 和 systemctl 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,就完全不需要加速源了。
只有在代理不可用、必须走国内网络时,才需要把加速源加回来。