优秀的编程知识分享平台

网站首页 > 技术文章 正文

群晖 Container Manager 无法通过代理拉取镜像的完整解决流程

nanyue 2025-07-06 15:26:11 技术文章 2 ℃

系统环境:

  • 群晖 DSM 7.2.2-72806 Update 3
  • Container Manager 版本:24.0.2-1535
  • 使用 macOS 上的 小火箭(Shadowrocket) 提供局域网 HTTP 代理
  • 群晖机器作为客户端代理上网

一、问题现象

  • Container Manager 可登录镜像仓库(如 Docker Hub)
  • 浏览器也可访问 docker.io 网站
  • 无法拉取镜像,提示 timeout、context deadline exceeded、权限 denied 等错误

二、问题原因总结

  1. 群晖默认 Docker 不使用系统代理
  2. 守护进程未读取代理设置
  3. SSH 用户没有 Docker 权限
  4. 群晖不支持用 systemd 或 synoservice 重启 Docker,需要重启整个系统

三、解决步骤(推荐流程)


第 1 步:确认代理服务开启并允许 LAN 访问

Mac 上的小火箭(Shadowrocket)中设置

  • 开启 HTTP 代理
  • 勾选 「Allow LAN Access(允许局域网设备使用代理)」
  • 查看 Mac 的本地 IP 地址,例如:192.168.0.42
  • 默认端口一般为 1080(Socks)或 1082(HTTP)

第 2 步:SSH 登录群晖并配置 Docker 代理

  1. 登录 SSH:
ssh admin@群晖IP地址
  1. 创建配置目录:
sudo mkdir -p /etc/docker
  1. 编辑代理配置文件:
sudo vi /etc/docker/daemon.json

填入如下内容(根据你的代理 IP 和端口调整):

{
  "proxies": {
    "default": {
      "httpProxy": "http://192.168.0.42:1082",
      "httpsProxy": "http://192.168.0.42:1082",
      "noProxy": "127.0.0.1,localhost"
    }
  }
}
  1. 保存并退出 vi(按下 Esc,输入 :wq,回车)

第 3 步:将当前用户加入 Docker 用户组(避免权限 denied)

sudo synogroup --add docker 你的用户名

建议重启或重新 SSH 登录以使权限变更生效。


第 4 步:重启 DSM 系统以使 Docker 加载代理配置

DSM 不支持直接重启 Docker 守护进程,推荐整机重启:

sudo reboot

或在 DSM 控制面板中手动重启系统。


第 5 步:重启后验证代理是否生效

登录 SSH,运行:

sudo docker info | grep -i proxy

正常输出应类似:

HTTP Proxy: http://192.168.0.42:1082
HTTPS Proxy: http://192.168.0.42:1082

第 6 步:测试拉取镜像

sudo docker pull busybox

若成功拉取,说明配置完全生效 。


附加测试命令(排查代理是否通)

如镜像拉取失败,可运行以下命令:

curl -x http://192.168.0.42:1082 https://www.google.com -v

若能获取页面内容或 HTTP/200 状态,说明代理本身正常。


文件结构检查(最终验证)

最终你的配置文件应是:

/etc/docker/daemon.json

{
  "proxies": {
    "default": {
      "httpProxy": "http://192.168.0.42:1082",
      "httpsProxy": "http://192.168.0.42:1082",
      "noProxy": "127.0.0.1,localhost"
    }
  }
}

以上

最近发表
标签列表