N1盒子Docker挂载群晖NFS共享目录

始于emby

一开始的emby跑在猫盘群晖上,但猫盘本来就跑了qb来挂pt,再跑emby还是挺吃力的,故转移到n1上,数据储存还是用猫盘,于是通过网络映射猫盘NFS共享目录,让猫盘只承担文件传输的负载。

群晖开启nfs

群晖控制面板->文件服务,把NFS和启用NFSv4.1支持都勾上,应用

控制面板->共享文件夹,选你要映射的文件夹,编辑->NFS权限,新增,如下图填写

其中 服务器名称或IP地址 填你要赋予映射权限的 设备ip/网段 ,或者直接用通配符 * 表示忽略来源限制,所有能连上来的设备都可以映射,反正局域网无所畏惧()。注意 Squash 一定要选映射所有用户为admin 不然没权限。

创建Docker Volume

使用docker创建驱动类型为nfs4的磁盘volume-nfs,并指定该nfs的ip,共享目录的权限,以及共享目录

1
2
3
4
5
6
7
8
9
10
root@Neko:~# docker volume create --driver local \
--opt type=nfs4 --opt o=addr=192.168.6.99,rw \
--opt device=:/volume1/catdrive volume-nfs

# 参数解释
--driver , -d local # 指定卷驱动程序名称,local为默认
--name # 指定卷名
--opt , -o # 设置驱动程序特定选项
addr= # 群晖Nas的ip
device= # 后面是群晖的目录,也就是你给了nfs权限的那个共享文件夹目录

查看创建好的volume

1
2
3
root@Neko:~# docker volume ls
DRIVER VOLUME NAME
local volume-nfs

查看该volume的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@Neko:~# docker volume inspect volume-nfs
[
{
"CreatedAt": "2021-07-08T14:16:38+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/mnt/mmcblk2p3/docker/volumes/volume-nfs/_data",

# volume-fs的挂载点
"Name": "volume-nfs",
"Options": {
"device": ":/volume1/catdrive", # nfs共享目录
"o": "addr=192.168.6.99,rw", # nfs服务器地址
"type": "nfs4" # 驱动类型
},
"Scope": "local"
}
]

于是在建立容器的时候就可以用 -v来使用这个nfs卷了,以我的emby服务为例,我想把这个卷挂到/neko文件夹下,建立embyserver代码就应该是

1
2
3
4
5
6
7
8
docker run -d \
--name emby \
--restart=always \
-v volume-nfs:/neko \ #ここ,就是这个
--network host \
--env UID=1000 \
--env GID=100 \
emby/embyserver_arm64v8:4.6.0.3

进入容器里面看看

1
2
3
4
root@Neko:~# docker exec -it emby /bin/sh
/ # ls
bin dev home lib licenses proc sys tmp var
config etc init libexec neko root system usr

可以看见neko文件夹已经出来了,可以作为emby的媒体库使用了。

问题

一开始用的是N1-openwrt自带的cifs/smb映射工具把群晖的目录映射在N1的文件系统里,再用docker映射这个目录,但是没有成功,容器一直无法启动。还有一种方法是在容器内部直接用mount指令挂载,只要赋予了–privileged=true参数,是可以成功挂载上的,但是如何在docker启动时自动运行挂载命令挺麻烦,搁置
后来看到了这位大佬的文章
Docker共享存储—共享数据
于是模仿得出了目前的解决方案,本文核心内容均来自于此。
关于Docker的问题,也可以看看这个帖子
n1.Docker容器个人安装运行所遇异常解决集合

このまま!


N1盒子Docker挂载群晖NFS共享目录
https://ice.icemilk.cc/archives/a6b882cb.html
作者
Ryza
发布于
2021年7月9日
许可协议