最近安装了一个利用docker安装了一个 alist(https://alist.vizan.one:8888/)用于一些日常文件的分享,因为涉及离线下载于是又安装了一个 aria2,用的 https://github.com/P3TERX/Aria2-Pro-Docker 这个项目;同样是docker部署,安装一切正常。
但是配置好之后,alist使用aria2离线下载时报错,大概错误如下:
failed to transfer file: failed to get files: lstat /data/Aria2/temp/aria2/xxxxx: no such file or directory
参考了一下issue https://github.com/alist-org/alist/discussions/5907 看了aria2日志,提示下载成功;但为啥呢?其实大概意思就是路径不对,alist没有拿到刚才下载的临时文件;因为我的alist和aria2是两个独立的容器,虽然路径相同,但实际并不在一个文件体系内。
解决办法
将alist容器内的aria2临时下载目录映射到aria2容器内部即可解决
先说下我的环境,安装alist的时候目录映射参数是:-v /www/wwwroot/alist:/opt/alist/data
,alist使用aria2下载时,对于宿主机而言的实际临时下载保存路径就是:/www/wwwroot/alist/temp/aria2
(可能没有aria2目录,手动建立一个即可)
得到docker aria2 启动时映射参数路径就是: -v /www/wwwroot/alist/temp/aria2:/opt/alist/data/temp/aria2
,将这个参数加到aria2启动时的参数即可,例如参考:
docker run -d \
--name aria2-pro \
--restart unless-stopped \
--log-opt max-size=1m \
-e PUID=$UID \
-e PGID=$GID \
-e RPC_SECRET=<SECRET> \
-e RPC_PORT=6800 \
-e LISTEN_PORT=6888 \
-v /www/wwwroot/dria2-pro-docker/config:/config \
-v /www/wwwroot/dria2-pro-docker/downloads:/downloads \
-v /www/wwwroot/alist/temp/aria2:/opt/alist/data/temp/aria2 \
-p 127.0.0.1:8807:6800 \
p3terx/aria2-pro
本质就是,将宿主机的同一个目录映射到两个容器内部,实现目录互通。