Alist是一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动的网盘文件管理开源程序。Alist不仅可以挂载本地存储,也可以挂载各类网盘,如阿里云、百度云、123等等。下面我们来用docker方法部署Alist,并将本地目录挂载。
我们使用的版本是支持aria2的docker版本,网址https://hub.docker.com/r/xhofe/alist-aria2
sudo docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist-aria2:latest
将自动完成。
首次使用,查询默认密码:
sudo docker exec -it alist ./alist admin
用此管理员账号登录:服务器ip:5244,点击页脚管理,再点击左侧:存储,添加,本机存储。其中,挂载路径指的是网页中显示的路径,/则是直接显示在根目录。而根文件夹路径则是文件实际存储在服务器的位置。值得注意的是,因为我们用的是docker方法,这个路径实际在docker中。如果想在服务器中访问这个文件,需要先进入docker:
1、获取alist容器的ID
sudo docker ps
2、进入容器的命令行
sudo docker exec -it 7dfc82a85888 /bin/bash
此时,该容器的根目录则对应“根文件夹路径”的根目录。比如,我在容器根目录新建了名为alist的文件夹,其中有一个test.txt文件,而我将根文件夹路径填为“/alist”,将挂在路径填为“/114514”,那么,我将在 服务器ip:5244 中看到:
如何管理 Docker 容器里的文件
Docker 容器虽然类似虚拟机,但如果想要物理机和容器内系统进行文件传输时,还是有点区别的。
如果只是单纯对容器内的系统进行本地文件管理的话,那么用 docker exec
这类命令直接进入容器内部,用常规命令行进行管理即可。
但很多时候都是突然遇到某个需求,需要外部物理机向容器内部拷贝文件,或者容器里的文件拷贝出来,而 Docker 的缺点就是容器一旦创建后,再修改参数比较麻烦,而创建时显然不可能预估到后续所有需求,提前映射所有目录啥的。
好在 Docker 本身就提供了对应的文件传输命令,那就是 copy 和 add 指令,这两个指令用法相似但又存在部分不同。
copy 命令顾名思义,是基础的指令,可以用于容器和外界物理机之间拷贝文件,命令格式视不同目标,可以有多种组合:
docker cp 容器 ID 或名称: 容器目录 物理机目录
docker cp 物理机目录 容器 ID 或名称: 容器目录
比如创建了一个镜像,容器 ID 为 b2860e937844。
比如想将物理机的/home/lishuma 目录拷贝到容器的/home 目录下,那么就运行:
docker cp /home/lishuma b2860e937844:/home/
运行后进入容器查看对应目录,可以看到了对应的 lishuma 目录:
如果是把上一条命令结尾斜杠去掉,那么意思就变成了将物理机/home/lishuma 目录拷贝到容器根目录中,并且拷贝进去的目录重命名为 home。
接着反过来,如果要将容器 b2860e937844 的/home/lishuma 目录(里面有一个 test.zip 文件)拷贝到物理机的/home/lishuma/test 目录中,那么命令格式为:
docker cp 容器 ID 或名称: 容器目录 物理机目录
运行:
docker cp b2860e937844:/home/lishuma /home/lishuma/test/
运行后可以看到物理机对应目录下出现了所需的目录:
和上面一样,反过来容器向外拷贝的命令如果去掉最后一个斜杠,那么意思同样是变成拷贝出来后,重命名为 test。
注意事项:
- 如果源路径是个文件,且目标路径是以 / 结尾, 则 docker 会把目标路径当作一个目录,会把源文件拷贝到该目录下(如果不存在则自动创建)。
- 如果目标文件是个存在的文件,会被源文件覆盖,文件名则为目标文件名。