从网络受限到畅通无阻:群晖 Docker 代理配置经验分享
说实话,刚开始用群晖 NAS 跑 Docker 的时候,我真的踩了不少坑。
你有没有遇到过这种情况:明明网络没问题,但 Docker 就是死活拉取不了镜像,或者容器内部怎么都访问不了外部资源?我当时真的崩溃了,折腾了好久才发现,原来是代理配置的问题。
今天我就把我的踩坑经验分享给你,帮你避坑避雷。
前言:配置前要做好这些准备
在开始之前,先跟你确认几件事:
- SSH 能用吗? 确保你的群晖 NAS 开启了 SSH,而且能通过终端连接
- 代理服务器准备好了吗? 局域网里得有个可用的 HTTP/HTTPS 代理,把 IP 和端口记好(比如
192.168.1.100:7890) - ⚠️ 重要提醒: 配置代理并重启 Docker 会停掉所有运行中的容器!先保存好数据,别像我当时那样手忙脚乱
方法一 服务覆盖文件(强烈推荐)
说实话,这是我试了 N 种方法之后,发现最稳定、最适合 DSM 7.x 的方式。
原理就是给 Docker 守护进程设置环境变量,让它走代理。听着很复杂?其实步骤很简单。
第1步 连接到群晖
用你的 SSH 客户端连上群晖。
第2步:创建配置目录
sudo mkdir -p /etc/systemd/system/pkg-ContainerManager-dockerd.service.d第3步:创建代理配置文件
sudo vi /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf第4步:添加代理配置
按 i 进入插入模式,粘贴下面的内容。记住把 IP 和端口换成你自己的!
[Service]Environment="HTTP_PROXY=http://YOUR_PROXY_IP:PORT"Environment="HTTPS_PROXY=http://YOUR_PROXY_IP:PORT"Environment="NO_PROXY=localhost,127.0.0.1"比如我的代理是 192.168.1.100:7890,配置就长这样:
[Service]Environment="HTTP_PROXY=http://192.168.1.100:7890"Environment="HTTPS_PROXY=http://192.168.1.100:7890"Environment="NO_PROXY=localhost,127.0.0.1"编辑完按 Esc 退出插入模式,输入 :wq 保存退出。
第5步:重新加载 systemd 配置
sudo systemctl daemon-reload第6步:重启 Docker 服务
sudo synosystemctl restart pkgctl-ContainerManager第7步:验证配置
跑这个命令看看环境变量设置成功了没:
systemctl show --property=Environment pkg-ContainerManager-dockerd.service或者用 docker info,在输出里找代理信息。
方法二 .json 文件配置
这个方法是 Docker 的通用配置方式,在大多数 Linux 系统上都能用。
第1步 连接到群晖
老规矩,先用 SSH 连上去。
第2步:创建或编辑 daemon.json
配置文件在 /etc/docker/daemon.json,没有就创建一个:
sudo vi /etc/docker/daemon.json第3步:添加代理配置
按 i 进入插入模式,粘贴下面的配置:
{ "proxies": { "default": { "httpProxy": "http://YOUR_PROXY_IP:PORT", "httpsProxy": "http://YOUR_PROXY_IP:PORT", "noProxy": "localhost,127.0.0.1" } }}注意: 这是新版本 Docker 推荐的写法。如果你的 Docker 版本比较老,或者上面这个不管用,试试这个:
{ "http-proxy": "http://YOUR_PROXY_IP:PORT", "https-proxy": "http://YOUR_PROXY_IP:PORT", "no-proxy": "localhost,127.0.0.1"}别忘了把 IP 和端口换成你的!比如我的配置:
{ "proxies": { "default": { "httpProxy": "http://192.168.1.100:7890", "httpsProxy": "http://192.168.1.100:7890", "noProxy": "localhost,127.0.0.1" } }}编辑完按 Esc,输入 :wq 保存退出。
第4步:重启 Docker 服务
sudo synosystemctl restart pkgctl-ContainerManager第5步:验证配置
跑 docker info,在输出里找 “HTTP Proxy” 和 “HTTPS Proxy” 的信息。
关于 SOCKS5 代理的吐槽
说实话,Docker 守护进程的代理配置不直接支持 SOCKS5。
我当时也是踩了这个坑,以为直接配置 SOCKS5 就能行,结果试了半天都是白费功夫。
如果你非要用 SOCKS5,有两个办法:
- 搞个转换代理: 在群晖或者局域网其他设备上跑个转换工具(比如
privoxy、squid),把 HTTP/HTTPS 请求转成 SOCKS5 - 容器里搞定: 如果只是某个容器需要代理,可以在容器内配置环境变量
ALL_PROXY或SOCKS_PROXY,或者装个proxychains
总结回顾一下核心要点
老实讲,在群晖 DSM 7.x 上配置 Docker 代理,我推荐你用 systemd 服务覆盖文件 的方式。为什么?因为它跟群晖的服务管理机制更贴合,稳定性真的好很多。
不管你选哪种方法:
✅ 操作前一定要备份数据 ✅ 仔细核对代理服务器信息 ✅ 配置完记得验证
现在就可以开始:
- 确认你的代理服务器 IP 和端口
- 选一个配置方法(推荐方法一)
- 照着步骤一步步来
- 重启 Docker 服务并验证
相信我,配置完之后,你会发现 Docker 真的很香!镜像想拉就拉,容器想访问外网就访问,再也不用卡在网络问题上崩溃了。
如果你在配置过程中遇到任何问题,随时来问我,我们一起搞定它!
推荐文章
基于标签匹配 · 智能推荐支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
喵斯基部落