Ubuntu环境docker安装webdav-aliyundriver
0 - 确认Ubuntu已经安装好docker
运行 docker -v 来确认是否已经安装docker:

显然这里没有安装,使用 apt install docker.io 安装:

好的,安装结束,再次使用 docker -v 命令测试( 如果有兴趣进一步研究 docker 的知识,这里推荐一个网站 https://yeasy.gitbook.io/docker_practice/ 上面用介绍了 docker 的基本概念和相关知识,相当不错)。
1 - 拉取 webdav-aliyundriver 镜像
访问 https://hub.docker.com/ 来查找镜像具体拉取路径,找到点赞数最多的这个(开发者已经帮我们做好了镜像,省了我们很大一部分精力去写 Dockerfile 去自己生成镜像)

点开,找到拉取路径复制

回到终端,进行拉取(这一步骤视网络情况,可能需要一些时间,如果实在网络问题拉取不下来,请参照 https://yeasy.gitbook.io/docker_practice/install/mirror 解决,或者参照 https://www.rootop.org/pages/4433.html 解决):

2 - 获取你自己的阿里云盘的Token
访问 https://www.aliyundrive.com/drive/#admi
按照图示获取

或者用一种更为简单的方法,输入 JSON.parse(window.localStorage["token"]).refresh_token

3 - 创建并运行容器
将下面的命令中的粉色字体改为你所需要的参数,特别是yourRefreshToken需要改,运行时可以先把命令复制到记事本修改之后,再复制到终端,请注意,命令行与行之间没有空白
docker run -d --name=webdav-aliyundriver --restart=always -p 8080:8080 \
-v /etc/localtime:/etc/localtime -v /root/docker/alidriver/:/etc/aliyun-driver/ \
-e TZ="Asia/Shanghai" -e ALIYUNDRIVE_REFRESH_TOKEN="yourRefreshToken" \
-e ALIYUNDRIVE_AUTH_PASSWORD="admin" -e JAVA_OPTS="-Xmx1g" zx5253/webdav-aliyundriver
之后在终端运行
这里解释几个参数:
-d 表示在后台(detach)运行容器,不输出在控制台
--name=[name] 容器名
-p [port_1]:[port_2] 容器内部端口 [port_2] 绑定到(默认tcp协议,使用 /udp 指定 upd协议)指定的主机端口 [port_1] , 还可以用参数 -P 来随机绑定,使用docker ps 命令来查看绑定结果
--restart=always 当 docker 重启时,容器自动启动
-v [path_1]:[path_2] 将自己的数据卷 [path_1] 挂载到容器的 [path_2] 上
-e 传递环境变量 ,ALIYUNDRIVE_AUTH_PASSWORD为访问webdav服务所需密码,酌情修改,JAVA_OPTS 修改最大内存占用,比如 -e JAVA_OPTS="-Xmx512m" 表示最大内存限制为512m

如果有安装 docker compose,也可用来运行(基本命令:docker compose up 运行所有容器,docker compose down 停止并删除所有容器 --volumes 附带删除数据卷)暂时按下不表
此时,webdav协议已经搭建完成,接下来该挂载了。
4 - 运用开源的 rclone 来挂载我们的硬盘
同样的,我们使用 docker 来运行rclone;拉取镜像:docker pull rclone/rclone

之后使用下面的代码创建配置文件:(运行时可以先把命令复制到记事本修改之后,再复制到终端,请注意,命令行与行之间没有空白,请根据命令提示输入相应内容)
docker run -it --rm \
--volume ~/.config/rclone:/config/rclone \
--volume ~/data:/data:shared \
--user $(id -u):$(id -g) \
rclone/rclone \
config
这里解释几个参数:
-it 以交互模式运行容器,为容器重新分配一个伪输入终端
--rm 退出容器以后,这个容器就被删除了,方便在临时测试使用
请按照下面的内容创建自己的配置文件:(粉色字体需要你按照自己情况修改)
[aliwebdav] # 示例命名,任意
type = webdav
url = http://192.168.0.1:12345 #网址,通过ifconfig查看docker0网桥的地址,端口,依据刚刚创建webdav-aliyundriver时的端口
vendor = other
user = admin
pass = ************ #密码,刚刚webdav-aliyundriver所使用的密码
之后使用下面的代码检测配置文件:
docker run --rm \
--volume ~/.config/rclone:/config/rclone \
--volume ~/data:/data:shared \
--user $(id -u):$(id -g) \
rclone/rclone \
listremotes

出现刚刚你创建的名字则为成功,接下来创建一个你网盘要挂载的本地位置;
mkdir -p /mnt/aliyunpan
接下来,挂载网盘:(注意修改粉色字体的内容)
docker run -d \
--volume ~/.config/rclone:/config/rclone \
--volume /mnt:/mnt:shared \
--user $(id -u):$(id -g) \
--volume /etc/passwd:/etc/passwd:ro --volume /etc/group:/etc/group:ro \
--device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined \
rclone/rclone \
mount aliwebdav:/ /mnt/aliyunpan/ --allow-non-empty --vfs-cache-mode writes
查看是否挂载成功:ls /mnt/aliyunpan

本地成功访问网盘内容
最后的小Tip:目前我们分别启动了两个容器来实现这个功能,略显繁琐,而且在配置 rclone 的 ip 的时候居然用了一个奇奇怪怪的网址,192.168.0.1,为什么不是 127.0.0.1 呢?明明 webdav 服务在本地啊,其实 docker 容器之间是相互隔离的,在容器内访问 127.0.0.1 并不是访问到我们的宿主机,docker 会自动生成一个名为 [docker0] 的网桥来连接各个容器,所以我们需要使用 ifconfig 来获取到 docker 网桥的地址,使我们 rclone 可以访问到 webdav 服务,其实我们可以使用 docker-compose 来更简单的实现我们的功能,只需一个文件,一次性打开两个相关的容器,哈哈,其实上面小字也有提到一点,好了就写这么多吧。
初学,不太熟悉,也作为自己学习的记录吧,日后可以拿出来看看~~~~