群晖 DSM 7.2 为 Container Manager设置代理

本文基于 DSM 7.2 实测,手把手教你为群晖 NAS 的 Docker 设置 HTTP/HTTPS/SOCKS5 代理,解决国内无法拉取镜像的问题。适合新手和进阶用户参考。

为什么要配置代理?

国内网络环境下,访问 Docker 官方镜像库经常遇到超时或拉取失败。通过配置 HTTP 或 SOCKS5 代理,可以让 Docker 顺利下载和更新镜像。

操作步骤

  1. SSH 登录群晖 NAS

    • 在 DSM 控制面板开启 SSH 服务(控制面板 → 终端机与 SNMP)。
    • 用命令行工具连接(Windows 推荐 PuTTY,Mac/Linux 直接用 Terminal):
      1
      ssh <用户名>@<NAS_IP>
    • 切换到 root 权限:
      1
      sudo -i
  2. 创建 Docker 服务配置目录

    1
    mkdir -p /etc/systemd/system/pkg-ContainerManager-dockerd.service.d
  3. 创建并编辑代理配置文件

    • 新建配置文件:
      1
      touch /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
    • 编辑文件:
      1
      vi /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
    • i 进入插入模式,粘贴如下内容(根据你的代理类型选择):

    HTTP/HTTPS 代理:

    1
    2
    3
    4
    [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 代理:

    1
    2
    3
    4
    [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"

    带认证的 SOCKS5 代理:

    1
    2
    3
    4
    [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用户名:密码 替换为你自己的代理信息。

  4. 保存并退出 vi

    • Esc 退出插入模式
    • 输入 :wq 保存并退出
    • 如果误操作,输入 :q! 强制退出不保存
  5. 重新加载并重启 Docker 服务

    1
    2
    systemctl daemon-reload
    systemctl restart pkg-ContainerManager-dockerd.service
  6. 验证代理是否生效

    • 查看环境变量:
      1
      systemctl show --property=Environment pkg-ContainerManager-dockerd.service
    • 若输出包含你的代理信息,说明配置成功。
    • 拉取镜像测试:
      1
      docker pull busybox
    • 容器内代理(可选):
      1
      2
      3
      4
      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

常见问题

  • 拉取镜像依然超时? 检查代理端口、防火墙和配置路径。
  • 代理类型不对? HTTP/HTTPS/SOCKS5 需按实际情况填写,SOCKS5 记得加前缀。
  • 容器内网络依然不通? 需在 `docker run` 时加环境变量,或在 Dockerfile 里设置。

如有更多代理技巧或遇到新问题,欢迎在评论区交流!

发布时间:2024年11月11日
内容距离首次发布已有 340 天,请注意时效性。

提示

  • 主要关注群晖 Container Manager 配置文件的具体位置,和原生 Docker 有区别;
  • 使用 docker info 可以查询到版本信息,版本太低的话请参考本文给出的第二种配置方法。

最近又见识到了一些神奇的骚操作,考虑到在将来 Docker 的国内各个镜像站可能变得不可用,需要未雨绸缪一下。有旁路由自然是好的,但现在打算用 Proxy 来解决这个问题。由于群晖的 Container Manager 是基于 Docker 的,但部分配置路径不同,所以特意记录一下。

注意事项

  • 本教程在群晖 DSM 7.2 版本通过测试,假定具备 root 权限
  • 假定你已有可以代理 HTTP 或 SOCKS 协议的端口:例如 192.168.50.100:7893
  • 尽可能引用官方文档,本文主要针对需要代理的部分的设置