本项目是基于Docker的镜像同步工具,支持自定义用户权限、定时任务和并行下载功能。
- Docker脚本等部分来自 ustcmirror-images
- apt-sync.py主要代码部分来自 tunasync-scripts
- 根据原项目要求,本项目遵守GPLv3协议
- 支持自定义UID/GID,解决权限问题
- 集成cron功能,单容器即可实现定时自动同步
- 使用aria2c替换默认下载器,支持多线程并行下载,显著提升同步速度
- 保持与原项目的兼容性,可直接替换使用
- 支持两种配置方式:环境变量配置和mirrors.list文件配置
使用APTSYNC_URL和APTSYNC_DISTS环境变量配置,适合单一镜像源的场景。
services:
aptsync-proxmox:
environment:
- PUID=[CHANGE-UID]
- PGID=[CHANGE-GID]
- APTSYNC_UNLINK=1
- APTSYNC_URL=http://download.proxmox.com/debian/pve
- APTSYNC_DISTS=bookworm|pve-no-subscription|amd64|
- CRON=20 23,6,12,20 * * *
- TO=/data
volumes:
- ./mirrors-data/proxmox:/data
- ./mirrors-logs/aptsync-proxmox:/log
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
image: channinghe/apt-sync:aria2c
aptsync-tailscale:
environment:
- PUID=[CHANGE-UID]
- PGID=[CHANGE-GID]
- APTSYNC_UNLINK=1
- APTSYNC_URL=https://pkgs.tailscale.com/stable/debian
- APTSYNC_DISTS=bookworm|main|arm64 amd64|:bullseye|main|arm64 amd64|
- CRON=20 23,6,12,18 * * *
- TO=/data
volumes:
- ./mirrors-data/tailscale:/data
- ./mirrors-logs/tailscale:/log
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
image: channinghe/apt-sync:aria2c
aptsync-debian:
environment:
- PUID=[CHANGE-UID]
- PGID=[CHANGE-GID]
- APTSYNC_UNLINK=1
- APTSYNC_URL=http://deb.debian.org/debian
- APTSYNC_DISTS=bookworm|main contrib non-free non-free-firmware|amd64
arm64|:bullseye|main contrib non-free|amd64 arm64|
- CRON="0 0,6,12,18 * * *"
- TO=/data
# 下载线程数
- PARALLEL_DOWNLOADS=8
volumes:
- ./mirrors-data/debian:/data
- ./mirrors-logs/aptsync-debian:/log
image: channinghe/apt-sync:aria2c
networks: {}使用标准apt-mirror格式的配置文件,支持多个镜像源,更灵活强大。
services:
aptsync-multi:
environment:
- PUID=[CHANGE-UID]
- PGID=[CHANGE-GID]
- APTSYNC_UNLINK=1
- CRON="0 2 * * *"
- TO=/data
- MIRRORS_LIST=/config/mirrors.list
- DEFAULT_ARCH=amd64,arm64
- PARALLEL_DOWNLOADS=8
volumes:
- ./mirrors-data:/data
- ./mirrors-logs:/log
- ./config:/config:ro
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
image: channinghe/apt-sync:aria2cmirrors.list文件内容示例:
# Debian官方源
deb https://ftp.jaist.ac.jp/debian/ bullseye main contrib non-free
deb https://ftp.jaist.ac.jp/debian/ bullseye-updates main contrib non-free
deb https://ftp.jaist.ac.jp/debian/ bullseye-backports main contrib non-free
# Proxmox源
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
# Docker源 (架构特定)
deb-amd64 https://download.docker.com/linux/debian bullseye stable
deb-amd64 https://download.docker.com/linux/debian bookworm stable
# Tailscale源
deb https://pkgs.tailscale.com/stable/debian bullseye main
deb https://pkgs.tailscale.com/stable/debian bookworm main
| 变量名 | 描述 | 默认值 |
|---|---|---|
| PUID | 运行进程的用户ID | - |
| PGID | 运行进程的组ID | - |
| CRON | 定时任务表达式,例如:20 23,6,12,20 * * * |
- |
| TO | 数据存储路径 | /data |
| MIRRORS_LIST | mirrors.list文件路径 | /config/mirrors.list |
| DEFAULT_ARCH | 默认架构(用于mirrors.list中的deb行) | amd64 |
| PARALLEL_DOWNLOADS | 并行下载线程数 | 4 |
| 变量名 | 描述 |
|---|---|
| APTSYNC_URL | 上游镜像URL |
| APTSYNC_DISTS | 需要同步的发行版配置,格式为:发行版|组件|架构| |
| APTSYNC_UNLINK | 是否先删除目标文件,设置为1开启 |
| 变量名 | 描述 | 默认值 |
|---|---|---|
| BIND_ADDRESS | 绑定的网络接口IP | - |
| APTSYNC_USER_AGENT | 自定义User-Agent | APT-Mirror-Tool/1.0 |
| MAX_RETRY | 最大重试次数(包文件) | 3 |
| INDEX_MAX_RETRY | 索引文件最大重试次数 | 5 |
| DOWNLOAD_TIMEOUT | 下载超时时间(秒) | 7200 |
| INDEX_DOWNLOAD_TIMEOUT | 索引文件下载超时时间(秒) | 1800 |
| ARIA2_DEBUG | 显示aria2c调试信息 | false |
| INDEX_DEBUG | 显示索引调试信息 | false |
| 路径 | 描述 |
|---|---|
| /data | 镜像数据存储目录 |
| /log | 日志存储目录 |
| /config | 配置文件目录(用于mirrors.list方式) |
| /etc/timezone | 容器时区配置(只读) |
| /etc/localtime | 容器本地时间配置(只读) |
支持标准的apt-mirror配置格式以及mirror_path语法:
deb URL DISTRIBUTION COMPONENTS- 同步指定发行版的二进制包deb [ arch=ARCH1,ARCH2 ] URL DISTRIBUTION COMPONENTS- 同步特定架构的包deb-ARCH URL DISTRIBUTION COMPONENTS- 同步特定架构的包(如deb-amd64)deb-src URL DISTRIBUTION COMPONENTS- 同步源码包(暂未实现)# 注释- 注释行- 空行将被忽略
使用mirror_path可以自定义URL前缀到本地目录的映射:
# 语法:mirror_path <url_prefix> <local_directory>
mirror_path https://apt.sys.truenas.net truenas
mirror_path http://deb.debian.org/debian/ debian
mirror_path https://download.lierfang.com/pxcloud/pxvirt pxvirt
# 然后定义仓库
deb https://apt.sys.truenas.net/fangtooth/25.04.0/debian/ bookworm main
deb https://apt.sys.truenas.net/fangtooth/nightlies/debian/ bookworm main
deb http://deb.debian.org/debian/ bookworm main contrib non-free
deb https://download.lierfang.com/pxcloud/pxvirt/ bookworm main生成的目录结构:
/data/
├── truenas/
│ ├── fangtooth/25.04.0/debian/dists/bookworm/...
│ └── fangtooth/nightlies/debian/dists/bookworm/...
├── debian/
│ └── dists/bookworm/...
└── pxvirt/
└── dists/bookworm/...
# 支持架构约束语法
deb [ arch=amd64,arm64 ] https://download.lierfang.com/pxcloud/pxvirt/ bookworm main
deb [ arch=amd64 ] https://download.docker.com/linux/debian bookworm stable当前可用镜像:
channinghe/apt-sync:aria2c- 使用aria2c加速的APT同步镜像channinghe/apt-sync:latest- 无aria2c,只支持CRON和PUID/GUID的版本
- 如果存在
/config/mirrors.list文件,优先使用mirrors.list配置 - 如果没有mirrors.list文件,则使用环境变量APTSYNC_URL和APTSYNC_DISTS
- 如果两种配置都不存在,容器将报错退出
项目提供了完整的示例文件:
examples/mirrors.list- mirrors.list配置文件示例,展示了各种仓库的配置方法examples/docker-compose.yml- Docker Compose配置示例,包含了两种配置方式的完整用法
您可以直接复制这些示例文件并根据需要进行修改。
- 权限问题: 确保PUID和PGID设置正确,并且挂载的目录有相应的读写权限
- 下载速度慢: 可以调整PARALLEL_DOWNLOADS参数增加并行下载数
- 网络超时: 可以增加DOWNLOAD_TIMEOUT值或检查网络连接
- 磁盘空间不足: 定期清理旧版本的包文件,或启用APTSYNC_UNLINK自动清理
- 404错误: 检查URL和发行版配置是否正确
- 确保URL可以正常访问:
curl -I <URL>/dists/<DISTRIBUTION>/Release - 验证发行版名称是否正确(如:
bookworm,jammy,focal等) - 检查组件名称是否存在(如:
main,contrib,non-free等)
- 确保URL可以正常访问:
- 双斜杠URL问题: 已修复,确保使用最新版本的镜像
- 索引文件下载失败: 现在会自动重试
- 默认重试5次(可通过INDEX_MAX_RETRY调整)
- 如果持续失败,检查网络连接或服务器状态
- 可以临时增加重试次数:
INDEX_MAX_RETRY=10
- ✅ 修复双斜杠URL问题,避免404错误
- ✅ 改进日志输出,不再显示临时文件名前缀(如
._syncing_.) - ✅ 增强错误处理和调试信息
- ✅ 添加配置测试工具
- ✅ 为索引文件下载添加重试机制,提高下载成功率
- ✅ 修复大文件下载超时问题,增加索引文件下载超时时间
- ✅ 添加下载进度跟踪和详细调试信息
- ✅ 新增mirror_path语法,支持自定义目录结构和多源管理
- ✅ 支持架构约束语法
[ arch=amd64,arm64 ]
启用调试模式可以获得更详细的日志信息:
environment:
- ARIA2_DEBUG=true
- INDEX_DEBUG=true
- DEBUG=1