Ubuntu環(huán)境docker安裝webdav-aliyundriver
0 - 確認(rèn)Ubuntu已經(jīng)安裝好docker
運行 docker -v 來確認(rèn)是否已經(jīng)安裝docker:

顯然這里沒有安裝,使用 apt install docker.io 安裝:

好的,安裝結(jié)束,再次使用 docker -v 命令測試(? 如果有興趣進(jìn)一步研究 docker 的知識,這里推薦一個網(wǎng)站 https://yeasy.gitbook.io/docker_practice/? 上面用介紹了 docker 的基本概念和相關(guān)知識,相當(dāng)不錯)。
1 - 拉取?webdav-aliyundriver?鏡像
訪問 https://hub.docker.com/ 來查找鏡像具體拉取路徑,找到點贊數(shù)最多的這個(開發(fā)者已經(jīng)幫我們做好了鏡像,省了我們很大一部分精力去寫?Dockerfile 去自己生成鏡像)

點開,找到拉取路徑復(fù)制

回到終端,進(jìn)行拉取(這一步驟視網(wǎng)絡(luò)情況,可能需要一些時間,如果實在網(wǎng)絡(luò)問題拉取不下來,請參照 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 - 創(chuàng)建并運行容器
將下面的命令中的粉色字體改為你所需要的參數(shù),特別是yourRefreshToken需要改,運行時可以先把命令復(fù)制到記事本修改之后,再復(fù)制到終端,請注意,命令行與行之間沒有空白
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
之后在終端運行
這里解釋幾個參數(shù):
-d 表示在后臺(detach)運行容器,不輸出在控制臺
--name=[name] 容器名
-p [port_1]:[port_2]?容器內(nèi)部端口 [port_2] 綁定到(默認(rèn)tcp協(xié)議,使用 /udp 指定 upd協(xié)議)指定的主機(jī)端口 [port_1] , 還可以用參數(shù) -P 來隨機(jī)綁定,使用docker ps 命令來查看綁定結(jié)果
--restart=always 當(dāng) docker 重啟時,容器自動啟動
-v [path_1]:[path_2]? 將自己的數(shù)據(jù)卷 [path_1] 掛載到容器的?[path_2]?上
-e 傳遞環(huán)境變量 ,ALIYUNDRIVE_AUTH_PASSWORD為訪問webdav服務(wù)所需密碼,酌情修改,JAVA_OPTS 修改最大內(nèi)存占用,比如 -e JAVA_OPTS="-Xmx512m" 表示最大內(nèi)存限制為512m

如果有安裝 docker compose,也可用來運行(基本命令:docker compose?up 運行所有容器,docker compose down? 停止并刪除所有容器 --volumes 附帶刪除數(shù)據(jù)卷)暫時按下不表
此時,webdav協(xié)議已經(jīng)搭建完成,接下來該掛載了。
4 - 運用開源的 rclone 來掛載我們的硬盤
同樣的,我們使用 docker 來運行rclone;拉取鏡像:docker pull rclone/rclone

之后使用下面的代碼創(chuàng)建配置文件:(運行時可以先把命令復(fù)制到記事本修改之后,再復(fù)制到終端,請注意,命令行與行之間沒有空白,請根據(jù)命令提示輸入相應(yīng)內(nèi)容)
docker run?-it --rm \
? ?--volume ~/.config/rclone:/config/rclone \
? ?--volume ~/data:/data:shared \
? ?--user $(id -u):$(id -g) \
? ?rclone/rclone \
? ?config
這里解釋幾個參數(shù):
-it 以交互模式運行容器,為容器重新分配一個偽輸入終端
--rm??退出容器以后,這個容器就被刪除了,方便在臨時測試使用
請按照下面的內(nèi)容創(chuàng)建自己的配置文件:(粉色字體需要你按照自己情況修改)
[aliwebdav] # 示例命名,任意
type = webdav
url = http://192.168.0.1:12345? #網(wǎng)址,通過ifconfig查看docker0網(wǎng)橋的地址,端口,依據(jù)剛剛創(chuàng)建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

出現(xiàn)剛剛你創(chuàng)建的名字則為成功,接下來創(chuàng)建一個你網(wǎng)盤要掛載的本地位置;
mkdir -p /mnt/aliyunpan
接下來,掛載網(wǎng)盤:(注意修改粉色字體的內(nèi)容)
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

本地成功訪問網(wǎng)盤內(nèi)容
最后的小Tip:目前我們分別啟動了兩個容器來實現(xiàn)這個功能,略顯繁瑣,而且在配置 rclone 的 ip 的時候居然用了一個奇奇怪怪的網(wǎng)址,192.168.0.1,為什么不是 127.0.0.1 呢?明明 webdav 服務(wù)在本地啊,其實 docker 容器之間是相互隔離的,在容器內(nèi)訪問 127.0.0.1 并不是訪問到我們的宿主機(jī),docker 會自動生成一個名為 [docker0] 的網(wǎng)橋來連接各個容器,所以我們需要使用 ifconfig 來獲取到 docker 網(wǎng)橋的地址,使我們 rclone 可以訪問到 webdav 服務(wù),其實我們可以使用 docker-compose 來更簡單的實現(xiàn)我們的功能,只需一個文件,一次性打開兩個相關(guān)的容器,哈哈,其實上面小字也有提到一點,好了就寫這么多吧。
初學(xué),不太熟悉,也作為自己學(xué)習(xí)的記錄吧,日后可以拿出來看看~~~~