Docker 搭建 aria2 + AriaNg
本文采用 P3TERX/Aria2-Pro-Docker 的镜像与参数。需要已有可用的 Docker Engine、可写的持久化目录,以及未占用的宿主机端口。已有同名容器时先查看其挂载和配置,不要直接删除重建。
示例将 RPC 和 AriaNg 网页绑定到宿主机回环地址,通过 SSH 隧道访问,适合 VPS。若改成局域网地址或反向代理,应同时配置访问限制及 TLS;不要在公网直接暴露明文 RPC。
安装 aria2
拉取 aria2 镜像
sh
docker pull p3terx/aria2-pro启动容器
先选择下载文件的宿主机所有者。download 是示例账户名,必须替换为已经存在、且需要读写下载文件的账户;用当前账户可改为 aria2_file_user=$(id -un)。不要依赖 Shell 自动提供 $UID / $GID,也不要把 UID、GID 当成用户名。
以下步骤在同一 Bash 会话执行;/srv/aria2/downloads 若改为 NAS 路径,先确认实际挂载已就绪、读写权限和数值 UID/GID 一致。
bash
aria2_file_user='download'
aria2_uid=$(id -u "$aria2_file_user") &&
aria2_gid=$(id -g "$aria2_file_user") &&
sudo install -d -m 0755 -o "$aria2_uid" -g "$aria2_gid" \
/srv/aria2/config /srv/aria2/downloads账户不存在或目录创建失败时停止。已有目录含其他数据时,应先核对现有权限,不要递归改动整块 NAS 的所有者。输入自设的高强度 RPC 密钥;这里使用 Bash 的隐藏输入,避免把密钥直接写入命令历史:
bash
read -r -s -p '输入自设的 RPC 密钥:' aria2_rpc_secret
printf '\n'确认变量非空后创建容器:
bash
: "${aria2_uid:?先选择文件所有者}"
: "${aria2_gid:?先选择文件所属组}"
: "${aria2_rpc_secret:?RPC 密钥不能为空}"
docker run -d \
--name aria2 \
--restart unless-stopped \
--log-opt max-size=1m \
-e PUID="$aria2_uid" \
-e PGID="$aria2_gid" \
-e UMASK_SET=022 \
-e RPC_SECRET="$aria2_rpc_secret" \
-e RPC_PORT=6800 \
-e LISTEN_PORT=16888 \
-p 127.0.0.1:16800:6800 \
-p 16888:16888 \
-p 16888:16888/udp \
-v /srv/aria2/config:/config \
-v /srv/aria2/downloads:/downloads \
p3terx/aria2-pro
unset aria2_rpc_secret参数和目录对应关系
| 参数 | 本文配置 | 作用 |
|---|---|---|
PUID / PGID | id -u / id -g 的结果 | 下载文件使用的用户和组;与 FileRun 等共享目录时需协调相同的数值身份及权限 |
UMASK_SET | 022 | 新文件的权限掩码;其他用户通常只有读取权限 |
RPC_SECRET | 自设密钥 | AriaNg 连接 RPC 时使用,不沿用镜像默认密钥 |
RPC_PORT | 容器内 6800 | 宿主机通过 127.0.0.1:16800 转发到此端口 |
LISTEN_PORT | 16888 | BT TCP 与 DHT UDP 监听端口,此处容器内外保持一致 |
/srv/aria2/config:/config | 配置目录 | 持久化配置和会话数据 |
/srv/aria2/downloads:/downloads | 下载目录 | AriaNg 中使用 /downloads,宿主机查看 /srv/aria2/downloads |
容器环境和生成的配置会保存 RPC 密钥,具有 Docker 管理权限的账户可以读取它。若仅下载 HTTP / HTTPS 文件,不使用 BT,可省略两个 16888 端口映射;使用 BT 入站时还需核对防火墙、云安全组及 NAT 转发。
安装 AriaNg
拉取 AriaNg 镜像
sh
docker pull p3terx/ariang启动容器
sh
docker run -d \
--name ariang \
--log-opt max-size=1m \
--restart unless-stopped \
-p 127.0.0.1:16880:6880 \
p3terx/ariang配置 RPC
在自己电脑的终端建立 SSH 隧道,将 user@server.example.com 替换为实际 SSH 登录地址;端口在本机已占用时需相应调整转发与浏览器设置。保持此连接打开:
sh
ssh -N -L 16880:127.0.0.1:16880 -L 16800:127.0.0.1:16800 user@server.example.com浏览器访问 http://127.0.0.1:16880,打开 AriaNg 设置 中的 RPC 配置。以下截图辅助定位,字段名称以当前界面为准。


| 字段 | 本文填写值 |
|---|---|
| RPC 别名 | 自定义 |
| RPC 地址 | 127.0.0.1,对应浏览器所在电脑的 SSH 转发入口 |
| RPC 端口 | 16800,不是容器内的 6800 |
| RPC 路径 | jsonrpc(完整请求路径为 /jsonrpc) |
| RPC 协议 / 请求方法 | HTTP / POST,传输由 SSH 隧道保护 |
| RPC 密钥 | 创建 aria2 容器时输入的同一密钥 |
AriaNg 是浏览器端界面,RPC 请求由浏览器发出,不是由 AriaNg 容器发出。因此,不能直接填另一个容器的内部名称。若通过 HTTPS 反向代理访问网页,RPC 也需使用浏览器可达的 HTTPS / WSS 地址,避免混合内容被拦截。
验证与排查
sh
docker ps --filter name=aria2 --filter name=ariang
docker logs --tail 50 aria2
docker logs --tail 50 ariang
docker port aria2
docker port ariang刷新 AriaNg,确认显示“已连接”,再添加一个有权下载的小文件。验证任务完成,并在宿主机 /srv/aria2/downloads 检查文件大小、所有者及内容。
无法连接时按 SSH 隧道、宿主机端口 16800、RPC 密钥、容器日志的顺序排查;显示已连接但下载失败时检查下载 URL、服务器出站网络和目录写入权限。配置及下载文件位于挂载目录,后续更新容器应保留这些目录并先备份配置。