---
url: /os/dsm/udgag0t3/index.md
---
## 概述

在国内网络环境下，访问 Docker 官方镜像库经常超时或拉取失败。为群晖 DSM 7.2 的 Container Manager（即 Docker 服务）配置 HTTP 或 SOCKS5 代理，可解决镜像拉取问题。本文记录通过 systemd drop-in 环境变量为 Container Manager 的 dockerd 设置代理的方法，并给出实测验证链路。

> \[!NOTE]
> Synology 的 dockerd 对 `daemon.json` 的 `proxies` 字段支持不可靠（需 Docker ≥ 23，且 GUI 会重写 daemon.json）。DSM 7.2 建议统一使用 systemd drop-in 环境变量方案，对所有版本生效，且不受 GUI 重写影响。

## 一、SSH 登录群晖

1. 在 DSM 控制面板开启 SSH 服务（控制面板 → 终端机与 SNMP）。

2. 连接 NAS（Windows 可用 PuTTY，Mac/Linux 直接用 Terminal）：

   ```bash
   ssh <用户名>@<NAS_IP>
   ```

3. 切换到 root：

   ```bash
   sudo -i
   ```

## 二、创建 Docker 服务配置目录

```bash
mkdir -p /etc/systemd/system/pkg-ContainerManager-dockerd.service.d
```

## 三、创建并编辑代理配置文件

1. 新建配置文件：

   ```bash
   touch /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
   ```

2. 编辑文件：

   ```bash
   vi /etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf
   ```

3. 按 `i` 进入插入模式，按代理类型填入以下内容（将 `192.168.1.3:10808` 及认证信息替换为你自己的代理）：

   **HTTP/HTTPS 代理：**

   ```ini
   [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 代理：**

   ```ini
   [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 代理：**

   ```ini
   [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"
   ```

> \[!TIP]
> SOCKS5 代理需添加 `socks5://` 前缀；带认证时用户名密码写在 `@` 前。

## 四、保存并退出 vi

* 按 Esc 退出插入模式
* 输入 `:wq` 保存并退出
* 放弃修改输入 `:q!` 强制退出

## 五、重新加载并重启 Docker 服务

```bash
systemctl daemon-reload
systemctl restart pkg-ContainerManager-dockerd.service
```

## 六、验证代理是否生效

1. 查看 dockerd 环境变量：

   ```bash
   systemctl show --property=Environment pkg-ContainerManager-dockerd.service
   ```

   输出包含你的代理信息即配置成功。

2. 拉取镜像测试：

   ```bash
   docker pull busybox
   ```

3. 容器内代理（可选）：

   ```bash
   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
   ```

## 七、检测链路（实测验证）

### 1. 代理连通性

```bash
# HTTP 代理
curl -x http://10.0.0.3:8888 -sI -o /dev/null -w '%{http_code}\n' https://registry-1.docker.io/v2/
# SOCKS5 代理
curl --socks5-hostname 10.0.0.3:7891 -sI -o /dev/null -w '%{http_code}\n' https://registry-1.docker.io/v2/
```

返回 `401` 即链路通（未带 token 的正常响应）。

### 2. 代理环境变量生效

```bash
docker info 2>/dev/null | grep -i proxy
```

应显示 `HTTP Proxy:`、`HTTPS Proxy:`、`No Proxy:` 三行。

### 3. 实测拉取

```bash
docker pull busybox   # 小镜像，快速验证
docker pull nginx     # ~60MB，压测真实速度
```

> \[!WARNING]
> 拉取依然超时：检查代理端口、防火墙与配置路径是否正确。
> 容器内网络不通：需在 `docker run` 时添加 `-e http_proxy` 等环境变量，或在 Dockerfile 中设置。

## 参考

* [群晖 DSM 7.2 为 Container Manager（docker）设置代理_群晖docker设置代理-CSDN博客](https://blog.csdn.net/caca_66/article/details/150264099)
