一、为什么需要它

先说清楚痛点:夸克网盘和阿里云盘是两家产品,官方没有任何「一键互转」的通道。要把夸克里的东西弄到阿里云盘,普通人只能先下载到电脑、再上传——文件大一点就慢到怀疑人生,还白白占用本地磁盘。

思路很直接:找一台一直在线的服务器当中转站,让数据在云端「夸克 → 服务器 → 阿里云盘」自己流动,你完全不用动手。夸克和阿里云盘都是国内服务,整条链路不需要代理 / 科学上网

本文交付物

一套跑在阿里云 ECS 上的 Docker 方案:AList 挂载两个网盘 + alist-sync 每天定时拷贝。你只需要最初配一次,之后每天自动同步。

二、整体架构

中转逻辑:数据从夸克拉到 ECS、再由 AList 推到阿里云盘,ECS 全程只做 relay(转发),不长期存你的文件。

夸克网盘 源文件夹 阿里云 ECS(中转) Docker AList 挂载两盘 alist-sync 每天 03:00 端口仅绑 127.0.0.1 阿里云盘 目标文件夹
图 1:夸克 → ECS 中转(AList + alist-sync)→ 阿里云盘。ECS 仅做转发,端口不暴露公网。

核心组件就两个容器:

1AList(网盘挂载)

一个支持几十种网盘协议的挂载工具。在 ECS 上把它跑起来,把夸克挂到 /quark、阿里云盘挂到 /aliyun,两个盘就像本地目录一样能互拷。

2alist-sync(定时拷贝)

专门负责「把 A 目录按计划拷到 B 目录」的小工具。给它一对路径 + 一个 cron 时间,它就每天准时干活。

三、装 Docker(被墙的坑)

这台 ECS 是 Alibaba Cloud Linux,默认没装 Docker。本来一行官方脚本就能装,但这台机器出网到 Docker 官网被挡了(SSL 握手失败)。

坑 1:Docker 官网 / Docker Hub 被墙

别死磕官方源。引擎用阿里云自己的镜像源装,拉镜像用国内镜像源。实测 daocloud 的部分镜像有白名单、Docker Hub 直连超时,最终靠「全量代理型」镜像源(如 docker.1ms.run)解决。

# 1. 加阿里云 Docker-CE 镜像源(替代被墙的官网)
dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i "s#download.docker.com#mirrors.aliyun.com/docker-ce#g" /etc/yum.repos.d/docker-ce.repo

# 2. 安装引擎 + compose 插件
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable --now docker

# 3. 配置国内镜像加速器(只留「可达」的源)
cat > /etc/docker/daemon.json <<'EOF'
{
  "registry-mirrors": ["https://docker.1ms.run", "https://docker.1panel.live"]
}
EOF
systemctl restart docker

# 4. 拉取两个镜像(镜像源被墙时换全量代理源重试)
docker pull alistv3/alist:latest
docker pull xjxjin/alist-sync:latest

关键提醒:配完镜像源一定要 systemctl restart docker 才生效;如果某个镜像源在这台机器上不可达(curl 返回 000),就把它从 daemon.json 里删掉,否则会卡在不可达源上超时。

四、起 AList(只绑本地)

用一份 docker-compose.yml 把 AList 跑起来。安全上我做了一个重要决定:把 5244 端口只绑到 127.0.0.1,不暴露到公网——别人从外网扫不到这个后台。

# docker-compose.yml(节选)
services:
  alist:
    image: alistv3/alist:latest
    container_name: alist
    restart: always
    ports:
      - "127.0.0.1:5244:5244"   # 只绑本地,不暴露公网
    volumes:
      - ./alist-data:/opt/alist/data
    networks: [syncnet]
  alist-sync:
    image: xjxjin/alist-sync:latest
    depends_on: [alist]
    environment:
      BASE_URL: "http://alist:5244"
      USERNAME: "admin"
      PASSWORD: "********"      # 示例已打码,实际用你自己的强密码
    networks: [syncnet]
networks: { syncnet: { driver: bridge } }

起好容器后设一个管理员密码(示例已打码:********)。之后要管理后台,在自己电脑上开一条 SSH 隧道即可,不用开放端口:

# 本地终端执行,保持窗口开着,再开浏览器访问
ssh -L 5244:127.0.0.1:5244 root@你的_ECS_IP
# 浏览器打开 ↓(仅本机可访问)
http://127.0.0.1:5244

挂载两个网盘前,先确认 AList 里的驱动名(版本不同名字可能变):夸克 = Quark,阿里云盘 Open = AliyundriveOpen不要用旧的 Aliyundrive)。

五、挂载两个网盘(AList 配置)

AList 的存储可以在网页后台手动加,也可以用 Admin API 批量加。下面是两个盘各自的「凭证怎么拿」。所有敏感值都已打码。

夸克网盘:用 Cookie

打开 pan.quark.cn 并登录,按 F12 → Application → Cookies → 选中全部行复制,把整段粘进 Quark 驱动的 cookie 字段。

一定要取「完整 Cookie」:用 Console 里 document.cookie 只返回非 HttpOnly 的字段,会缺 __pusgrey-id 等关键值,导致挂载 init 失败。Application 标签里复制出来的才是全的。

# 示例(已打码,实际用你自己的完整 Cookie)
__pus=****; ctoken=****; __uid=****; __puus=****; isg=****; ...

阿里云盘 Open:用 refresh_token(可扫码)

用官方扫码工具(alist.nn.ci 上的 Aliyundrive Open 取 token 页)扫一下,自动拿到 refresh_token,填进 AliyundriveOpen 驱动的 refresh_token 字段。

# 示例(已打码,实际用你扫码得到的 token)
refresh_token = eyJhbGciOiJSUzI1NiJ9.****(已打码)

坑 2:布尔字段不能传字符串

用 API 建存储时,addition 要整体序列化成字符串,但里面的布尔字段必须传真正的 true / false,不能传 "false" 字符串,否则驱动初始化会失败。这是排错排了半天才发现的。

挂载完,列一下 /quark/aliyun 目录,能正常列出文件即成功。

六、配定时同步(alist-sync)

给同步容器两个关键环境变量:DIR_PAIRS 写「源:目标」路径对,CRON_SCHEDULE 写 cron 时间。

# alist-sync 环境变量(节选)
BASE_URL:      "http://alist:5244"
USERNAME:      "admin"
PASSWORD:      "********"          # 已打码
DIR_PAIRS:     "/quark/转阿里云盘:/aliyun/来自夸克"
CRON_SCHEDULE: "0 3 * * *"      # 每天 03:00 自动同步

目标文件夹不存在会自动创建,不用提前在阿里云盘里建。多对目录用 ; 分隔。

验证时我另跑了一个「cron 留空」的一次性容器——这样它会立即拷贝一次而不是等明天。确认 16 个文件全部「复制成功」,再到阿里云盘侧核对落地,链路就通了。

七、踩坑清单(小结)

把全程踩过的坑浓缩成一张表,照着避:

现象解法
Docker 官网被墙官方安装脚本 SSL 失败改用阿里云镜像源装引擎
Docker Hub 拉不到镜像registry-1.docker.io 超时国内镜像源 + 全量代理源(如 docker.1ms.run)
镜像源不可达 / 有白名单curl 返回 000 / 401只留可达源;白名单外的镜像换代理源拉
夸克 Cookie 不完整存储 init 失败,列不出目录用 Application 标签复制完整 Cookie,别用 document.cookie
布尔字段传成字符串驱动初始化失败API 建存储时布尔字段用真 true/false
alist-sync 偶发随机失败某次同步部分文件没拷过去每天跑一次,次日定时会自动补齐
凭证过期同步某天突然断掉夸克 Cookie / 阿里云盘 token 失效后重新取一次

八、安全与收尾

AList 千万不要「裸奔」到公网。当前方案端口只绑 127.0.0.1,需要远程管理就用 SSH 隧道本地访问,这是目前最稳的做法。

如果以后想「给别人也用」,要分清一件事:AList 是单租户架构,别人登录看到的是你挂的盘,不是他自己的。真要让朋友用他自己的夸克 / 阿里云盘,得每人一个独立的 AList 实例(可以做成「开新用户」脚本,后续再谈)。本文的链路是给你自己的私有中转站,不是公共服务。

最后一句大实话:夸克 Cookie 和阿里云盘 token 都会过期,同步「某天自己停了」是常态。失效后重新取一次凭证、在后台改下存储即可,不用重装。