如果你使用的是群晖 NAS (本文在 DSM 7.2 版本测试通过),可能会遇到无法下载 Docker 镜像的情况。通过配置代理,你可以轻松绕过这些限制,顺利下载和更新镜像。本教程教你如何为 Docker 设置代理,让 Docker 本身的网络请求走你指定的 HTTP 或 SOCKS5 代理服务器。
为什么需要代理?
国内目前网络环境可能会限制你访问 Docker 镜像库(例如 docker pull
等操作),尤其是官方的国外镜像库。配置 HTTP 或 SOCKS5 代理可以让你绕过这些限制,顺畅地拉取镜像。
操作步骤
1. 登录到群晖 NAS
首先,你需要通过 SSH 连接到你的群晖 NAS。在 DSM 中,进入 控制面板 > 终端机与 SNMP,启用 SSH 服务。然后打开命令行工具(Windows 用 PuTTY,Mac 或 Linux 用 Terminal),输入以下命令:(命令回车执行)
ssh <用户名>@<NAS_IP>
替换 <用户名>
为你的群晖管理员用户名,<NAS_IP>
为 NAS 的 IP 地址。接着切换到 root 权限(需要输入管理员密码):
sudo -i
2. 为 Docker 创建一个配置文件夹
在 SSH 终端执行以下命令:
mkdir -p /etc/systemd/system/pkg-ContainerManager-dockerd.service.d
3. 创建并编辑代理配置文件
创建一个配置文件来存放代理信息:
touch /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
用 vi 文本编辑器打开它:
vi /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
进入插入模式:按下 i 键,这时你会看到底部出现 — INSERT — 的提示,表示可以开始编辑文本。
输入或粘贴内容: 在文件中添加以下内容,设置 HTTP 和 HTTPS 代理:(shift+insert
可粘贴)
[Service]
Environment="HTTP_PROXY=http://192.168.1.3:10808"
Environment="HTTPS_PROXY=http://192.168.1.3:10808"
Environment="NO_PROXY=localhost,127.0.0.1"
如果你使用的是 Socks5 代理,改为:
[Service]
Environment="HTTP_PROXY=socks5://192.168.1.3:10808"
Environment="HTTPS_PROXY=socks5://192.168.1.3:10808"
Environment="NO_PROXY=localhost,127.0.0.1"
如果需要认证,格式如下:
[Service]
Environment="HTTP_PROXY=socks5://用户名:密码@192.168.1.3:10808"
Environment="HTTPS_PROXY=socks5://用户名:密码@192.168.1.3:10808"
Environment="NO_PROXY=localhost,127.0.0.1"
注意:替换 192.168.1.3:10808 和 用户名:密码 为你自己的信息。
保存并退出:
- 按 Esc 键,退出插入模式。
- 输入 :wq 然后按 Enter 键,表示保存并退出。
如果在 vi 中不小心进入了错误模式,你可以按 Esc 键,然后输入 :q! 再按 Enter 退出而不保存任何更改。
4. 重新加载并重启 Docker 服务
完成配置后,需要重新加载一下配置文件,并重启 Docker 服务:
systemctl daemon-reload
systemctl restart pkg-ContainerManager-dockerd.service
5. 验证代理是否设置成功
接下来,我们验证一下代理设置是否生效。使用以下命令查看 Docker 的环境变量:
systemctl show --property=Environment pkg-ContainerManager-dockerd.service
如果显示的内容中有你刚刚设置的代理信息,说明配置成功:
Environment=HTTP_PROXY=http://192.168.1.3:10808
Environment=HTTPS_PROXY=http://192.168.1.3:10808
Environment=NO_PROXY=localhost,127.0.0.1
6. 测试 Docker 代理
最后,我们通过拉取镜像测试代理是否生效。运行以下命令:
docker pull busybox
如果镜像能正常下载,说明 Docker 已经通过代理成功连接网络。
另外如果要在 Docker 容器内通过代理访问网络,你可以在运行 Docker 容器时,设置环境变量来指定代理,例如:
docker run -e http_proxy=http://your-proxy:port \
-e https_proxy=http://your-proxy:port \
-e no_proxy=localhost,127.0.0.1 \
your-image
总结
恭喜!你已经成功为 Docker 设置了代理。在受限网络环境中,代理是非常有用的工具,帮助你顺利拉取镜像。按照本教程,你只需登录 NAS,创建并编辑配置文件,然后重启 Docker 服务,就能让 Docker 使用代理了。
希望这个简单的指南对你有帮助!赶快试试吧~
一步步来的,就是不行。
不行的话可能版本问题, 可以看看这个 https://v2ex.com/t/1048790
如果不需要了,如何恢复呢?
依次执行:
sudo -i
rm -f /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
systemctl daemon-reload
systemctl restart pkg-ContainerManager-dockerd.service
确认成功了,第五步确认已经修改完成了,可是还是不能再群晖控制面板里面网络关闭代理,不然docker注册表依然访问不了。拉去速度未有改善,我之前就是群晖网络添加代理,然后注册表同时添加镜像,我不知道现在按您的改了有什么不同,好像不开群晖代理还是未生效
第六步没成呗, 可能你群晖就访问不到代理,
curl -x http://xxx:1080 http://ipinfo.io
试试呗