📖 前言
在群晖 DSM 7.2 及以上版本中,Docker 的代理配置发生了变化。传统方法(如控制面板代理设置)对 Docker 不再生效。本教程将详细介绍两种有效的配置方法:SSH 命令行方法和 1Panel 可视化方法。
🎯 问题背景
群晖控制面板的代理设置对 Docker 无效
Docker 图形界面(注册表)拉取镜像失败
docker pull命令需要代理才能正常工作
📋 配置前准备工作
1. 确认群晖版本
DSM 7.2 或更新版本
Docker 套件已安装
2. 准备代理信息
代理服务器地址:例如
127.0.0.1:20171(本地 V2Ray)确认代理服务器正常运行
3. 启用 SSH(方法一需要)
控制面板 → 终端机和 SNMP → 启用 SSH 服务
方法一:通过 SSH 命令行配置
🚀 步骤 1:SSH 登录群晖
# 使用管理员账号连接
ssh admin@你的群晖IP
# 输入密码后,切换到 root 用户
sudo -i
# 再次输入管理员密码🛡️ 步骤 2:备份原配置文件
# 备份 Docker 服务文件
cp /usr/local/lib/systemd/system/pkg-ContainerManager-dockerd.service /usr/local/lib/systemd/system/pkg-ContainerManager-dockerd.service.backup
# 创建备份时间戳
echo "备份时间: $(date)" > /usr/local/lib/systemd/system/backup_info.txt📝 步骤 3:编辑配置文件
# 使用 vi 编辑器打开文件
vi /usr/local/lib/systemd/system/pkg-ContainerManager-dockerd.service✏️ 步骤 4:添加代理配置
在文件中找到 [Service] 部分,添加以下三行:
[Service]
# 在 Type=notify 上方或下方添加以下三行:
Environment="HTTP_PROXY=http://127.0.0.1:20171"
Environment="HTTPS_PROXY=http://127.0.0.1:20171"
Environment="NO_PROXY=localhost,127.0.0.0/8,192.168.0.0/16,172.16.0.0/12,10.0.0.0/8"
Type=notify
# ... 其他配置保持不变💾 步骤 5:保存文件
在 vi 编辑器中:
按
ESC键退出编辑模式输入
:wq然后按Enter保存并退出
🔄 步骤 6:应用配置
# 重新加载 systemd 配置
systemctl daemon-reload
# 重启 Docker 服务
systemctl restart pkg-ContainerManager-dockerd.service
# 等待几秒,查看服务状态
systemctl status pkg-ContainerManager-dockerd.service✅ 步骤 7:验证配置
# 检查环境变量
systemctl show pkg-ContainerManager-dockerd.service --property Environment
# 测试拉取镜像
docker pull nginx:alpine
# 验证代理生效
docker info | grep -i proxy方法二:通过 1Panel 可视化配置
🌐 步骤 1:登录 1Panel
打开浏览器,访问 1Panel 地址
使用管理员账号登录
📁 步骤 2:打开文件管理器
在左侧菜单点击"文件"
在路径栏输入:
/usr/local/lib/systemd/system/按 Enter 键进入该目录
🗂️ 步骤 3:备份原文件
找到
pkg-ContainerManager-dockerd.service文件右键点击文件,选择"复制"
在空白处右键,选择"粘贴"
将副本重命名为:
pkg-ContainerManager-dockerd.service.backup
✨ 步骤 4:编辑配置文件
双击
pkg-ContainerManager-dockerd.service文件打开编辑器使用搜索功能(Ctrl+F)查找
[Service]
🎨 步骤 5:添加代理配置
在 [Service] 部分添加以下三行:
[Service]
# 在 Type=notify 之前或之后添加:
Environment="HTTP_PROXY=http://127.0.0.1:20171"
Environment="HTTPS_PROXY=http://127.0.0.1:20171"
Environment="NO_PROXY=localhost,127.0.0.0/8,192.168.0.0/16,172.16.0.0/12,10.0.0.0/8"示例完整段落:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:20171"
Environment="HTTPS_PROXY=http://127.0.0.1:20171"
Environment="NO_PROXY=localhost,127.0.0.0/8,192.168.0.0/16,172.16.0.0/12,10.0.0.0/8"
Type=notify
ExecStart=/var/packages/ContainerManager/target/usr/bin/dockerd --config-file /var/packages/ContainerManager/etc/dockerd.json
# ... 其他配置💾 步骤 6:保存文件
点击编辑器右上角的"保存"按钮
关闭编辑器
🖥️ 步骤 7:打开终端执行命令
在 1Panel 左侧菜单点击"终端"
在新的终端窗口中执行:
# 重新加载 systemd 配置
systemctl daemon-reload
# 重启 Docker 服务
systemctl restart pkg-ContainerManager-dockerd.service
# 检查服务状态
systemctl status pkg-ContainerManager-dockerd.service🧪 步骤 8:验证配置
在 1Panel 终端中继续执行:
# 查看环境变量
systemctl show pkg-ContainerManager-dockerd.service --property Environment
# 清理 Docker 缓存
docker system prune -a -f
# 测试拉取镜像
docker pull gdy666/lucky:v2
# 查看拉取日志
docker events --since '2m' --until 'now' | grep pull🔍 两种方法对比
✅ 配置验证清单
基础验证
配置文件已正确修改
systemctl daemon-reload已执行Docker 服务已重启
服务状态显示正常
代理验证
systemctl show显示代理环境变量docker pull可以拉取镜像V2Ray 代理服务器正在运行
代理端口 20171 可访问
功能验证
Docker 容器可以正常启动
容器内网络访问正常
镜像拉取速度正常
没有网络超时错误
🛠️ 故障排除指南
问题 1:服务启动失败
# 查看详细错误日志
journalctl -u pkg-ContainerManager-dockerd.service -n 50 --no-pager
# 恢复备份文件
cp /usr/local/lib/systemd/system/pkg-ContainerManager-dockerd.service.backup /usr/local/lib/systemd/system/pkg-ContainerManager-dockerd.service
systemctl daemon-reload
systemctl restart pkg-ContainerManager-dockerd.service问题 2:代理不生效
# 测试代理服务器
curl -x http://127.0.0.1:20171 https://hub.docker.com -I
# 检查 V2Ray 运行状态
docker ps | grep v2ray # 如果是容器运行
ps aux | grep v2ray # 如果是系统服务
# 检查端口监听
netstat -tlnp | grep :20171问题 3:镜像拉取缓慢
# 添加国内镜像加速器
vi /var/packages/Docker/etc/dockerd.json
# 添加以下内容:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
# 重启 Docker 服务
systemctl restart pkg-ContainerManager-dockerd.service问题 4:群晖重启后配置丢失
# 创建持久化配置
mkdir -p /etc/systemd/system/docker.service.d/
cat > /etc/systemd/system/docker.service.d/proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:20171"
Environment="HTTPS_PROXY=http://127.0.0.1:20171"
Environment="NO_PROXY=localhost,127.0.0.0/8,192.168.0.0/16,172.16.0.0/12,10.0.0.0/8"
EOF
# 重新加载配置
systemctl daemon-reload
systemctl restart pkg-ContainerManager-dockerd.service