1104 字
6 分钟

从网络受限到畅通无阻:群晖 Docker 代理配置经验分享

说实话,刚开始用群晖 NAS 跑 Docker 的时候,我真的踩了不少坑。

你有没有遇到过这种情况:明明网络没问题,但 Docker 就是死活拉取不了镜像,或者容器内部怎么都访问不了外部资源?我当时真的崩溃了,折腾了好久才发现,原来是代理配置的问题。

今天我就把我的踩坑经验分享给你,帮你避坑避雷。

前言:配置前要做好这些准备#

在开始之前,先跟你确认几件事:

  1. SSH 能用吗? 确保你的群晖 NAS 开启了 SSH,而且能通过终端连接
  2. 代理服务器准备好了吗? 局域网里得有个可用的 HTTP/HTTPS 代理,把 IP 和端口记好(比如 192.168.1.100:7890)
  3. ⚠️ 重要提醒: 配置代理并重启 Docker 会停掉所有运行中的容器!先保存好数据,别像我当时那样手忙脚乱

方法一 服务覆盖文件(强烈推荐)#

说实话,这是我试了 N 种方法之后,发现最稳定、最适合 DSM 7.x 的方式。

原理就是给 Docker 守护进程设置环境变量,让它走代理。听着很复杂?其实步骤很简单。

第1步 连接到群晖#

用你的 SSH 客户端连上群晖。

第2步:创建配置目录#

Terminal window
sudo mkdir -p /etc/systemd/system/pkg-ContainerManager-dockerd.service.d

第3步:创建代理配置文件#

Terminal window
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 配置#

Terminal window
sudo systemctl daemon-reload

第6步:重启 Docker 服务#

Terminal window
sudo synosystemctl restart pkgctl-ContainerManager

第7步:验证配置#

跑这个命令看看环境变量设置成功了没:

Terminal window
systemctl show --property=Environment pkg-ContainerManager-dockerd.service

或者用 docker info,在输出里找代理信息。

方法二.json 文件配置#

这个方法是 Docker 的通用配置方式,在大多数 Linux 系统上都能用。

第1步 连接到群晖#

老规矩,先用 SSH 连上去。

第2步:创建或编辑 daemon.json#

配置文件在 /etc/docker/daemon.json,没有就创建一个:

Terminal window
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 服务#

Terminal window
sudo synosystemctl restart pkgctl-ContainerManager

第5步:验证配置#

docker info,在输出里找 “HTTP Proxy” 和 “HTTPS Proxy” 的信息。

关于 SOCKS5 代理的吐槽#

说实话,Docker 守护进程的代理配置不直接支持 SOCKS5

我当时也是踩了这个坑,以为直接配置 SOCKS5 就能行,结果试了半天都是白费功夫。

如果你非要用 SOCKS5,有两个办法:

  1. 搞个转换代理: 在群晖或者局域网其他设备上跑个转换工具(比如 privoxysquid),把 HTTP/HTTPS 请求转成 SOCKS5
  2. 容器里搞定: 如果只是某个容器需要代理,可以在容器内配置环境变量 ALL_PROXYSOCKS_PROXY,或者装个 proxychains

总结回顾一下核心要点#

老实讲,在群晖 DSM 7.x 上配置 Docker 代理,我推荐你用 systemd 服务覆盖文件 的方式。为什么?因为它跟群晖的服务管理机制更贴合,稳定性真的好很多。

不管你选哪种方法:

✅ 操作前一定要备份数据 ✅ 仔细核对代理服务器信息 ✅ 配置完记得验证

现在就可以开始:

  1. 确认你的代理服务器 IP 和端口
  2. 选一个配置方法(推荐方法一)
  3. 照着步骤一步步来
  4. 重启 Docker 服务并验证

相信我,配置完之后,你会发现 Docker 真的很香!镜像想拉就拉,容器想访问外网就访问,再也不用卡在网络问题上崩溃了。

如果你在配置过程中遇到任何问题,随时来问我,我们一起搞定它!

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
从网络受限到畅通无阻:群晖 Docker 代理配置经验分享
https://blog.moewah.com/posts/synology-docker-proxy-configuration-pitfall-guide/
作者
GoWah
发布于
2025-04-05
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
GoWah
Hello, I'm GoWah.
分类
标签
站点统计
文章
160
分类
9
标签
350
总字数
301,106
运行时长
0
最后活动
0 天前

目录