跳到主要内容

Proxmox VE(PVE)映射目录到非特权LXC容器,Jellyfin可访问

说明

有一台PVE,装有群晖(DSM),我想通过LXC安装Jellyfin的方式,开启GPU硬解。 该如何将DSM挂载到非特权LXC容器里?

1、挂载到DSM共享目录到PVE

pve->datacenter->storage 里添加cifs存储(Content随便选一个就行),添加完后会被挂载到/mnt/pve/底下

2、宿主机配置

2.1 更改 /etc/pve/lxc/<id>.conf 配置

更改映射文件 /etc/pve/lxc/500.conf(我的是500):

# uid map: from uid 0 map 1005 uids (in the ct) to the range starting 100000 (on the host), so 0..1004 (ct) → 100000..101004 (host)
lxc.idmap = u 0 100000 1005
lxc.idmap = g 0 100000 1005
# we map 1 uid starting from uid 1005 onto 1005, so 1005 → 1005
lxc.idmap = u 1005 1005 1
lxc.idmap = g 1005 1005 1
# we map the rest of 65535 from 1006 upto 101006, so 1006..65535 → 101006..165535
lxc.idmap = u 1006 101006 64530
lxc.idmap = g 1006 101006 64530

这段代码是关于Linux容器(LXC)的用户和组ID映射的配置。LXC是一种操作系统级别的虚拟化技术,可以让用户在隔离的环境中运行程序。这段代码的主要目的是在主机和容器之间建立用户和组ID的映射,以便在主机和容器之间共享资源。

lxc.idmap = u 0 100000 1005 和 lxc.idmap = g 0 100000 1005:这两行代码将容器中的用户ID和组ID从0映射到主机的100000,映射的数量是1005。也就是说,容器中的用户ID和组ID从0到1004会被映射到主机的100000到100004。

lxc.idmap = u 1005 1005 1 和 lxc.idmap = g 1005 1005 1:这两行代码将容器中的用户ID和组ID 1005映射到主机的1005,映射的数量是1。也就是说,容器中的用户ID和组ID 1005会被映射到主机的1005。

lxc.idmap = u 1006 101006 64530 和 lxc.idmap = g 1006 101006 64530:这两行代码将容器中的用户ID和组ID从1006映射到主机的101006,映射的数量是64530。也就是说,容器中的用户ID和组ID从1006到65535会被映射到主机的101006到165535。

/etc/subuid中加入 root:1005:1 和 /etc/subgid中加入 root:1005:1:这两行代码是在主机的/etc/subuid和/etc/subgid文件中添加条目,分别为root:1005:1。这意味着主机的root用户被允许在容器中以用户ID和组ID 1005的身份运行程序。

2.2 添加挂载点

pct set 500 -mp0 /mnt/pve/music,mp=/opt/nas/music

pct set <id> -mp0 <host目录>,mp=<容器目录>

2.3 /etc/subuid 和 /etc/subgid

接下来,我们需要让 lxc 在宿主机上进行实际的映射操作。由于 lxc 是以 root 的身份创建 CT 的,所以我们需要允许 root 在容器中使用这些用户ID。

文件 /etc/subuid 添加

root:1005:1

文件 /etc/subgid 添加:

root:1005:1

最后记得更改主机上绑定挂载点目录的所有者,以匹配对容器开放的 uid 和 gid(我的是/mnt/pve/music

chown -R 1005:1005 /mnt/pve/music