Ammetto di averci perso un bel po’ di tempo a risolvere questo problema, che inizialmente pensavo fosse di poco conto. Ho deciso di trasportare Docker su un contenitore LXC di Proxmox, rimuovendolo quindi dalla macchina virtuale Ubuntu su Proxomx sulla quale risiedeva da ben 2 anni. Mi sono convinto a fare questo switch per vari motivi, ma prevalentemente per gestire meglio le risorse ed a conti fatti questa sembra la soluzione migliore. Anche se la best practice indicata sulla documentazione di Proxmox suggerirebbe di lanciare Docker su una Virtual Machine piuttosto che su un contenitore LXC, come anche io ho fatto fino ad ora, invece grande parte della comunità non la pensa allo stesso modo, e con loro anche io. Un motivo su tutti? l’utilizzo della GPU. Infatti se effettuiamo il passthrough della GPU potremmo utilizzarla solo su una VM (tecnicamente sarebbe possibile farla funzionare su più macchine virtuali ma da molti test si evince come le performance si riducano drasticamente in questo scenario) mentre se la lasciamo sull’host potremo usarla tranquillamente sui contenitori LXC (sì sto parlando della trascodifica di Plex e di Jellyfin).
Il problema è che installando Docker su un contenitore LXC senza privilegi sarà abbastanza complicato andare vedere, da quella macchina, un eventuale NAS. Ho fatto diverse prove ma senza successo. Alla fine ho trovato un post del forum ufficiale di Proxmox che proponeva una procedura che non funzionava completamente per le mie esigenze (il NAS era visto sul contenitore LXC ma non sulle istanze di Docker), ma mi ha aperto alla soluzione.
In pratica bisogna prima di tutto montare il NAS sul file fstab di Proxmox, poi bisogna aggiungere un mount point sul contenitore LXC che punti al mount del NAS sull’host. La particolarità è che il NAS sull’host deve essere montato con UID 101000 e GID 101000, questo perché i contenitori Docker di default impostano UID 1000 e GID 1000 (ovviamente se li avete personalizzati vanno cambiati).
# TrueNAS
//192.168.1.50/share /mnt/truenas/share cifs _netdev,noatime,username=user,password=pass,uid=101000,gid=101000,dir_mode=0770,file_mode=0770,x-systemd.automount 0 0
Infatti l’utente root senza privilegi dei contenitori LXC ha sempre UID 100000 e quindi l’utente default del contenitore Docker diventa 101000.
Per rendere le cose più semplici
Per rendere le cose più semplici utilizzo una particolare procedura. Dopo aver aggiunto il mount point sul file fstab, sul contenitore lxc creo un gruppo lxc_shares, di utenti che hanno accesso al NAS.
# Nel caso il contenitore sia privileged
groupadd -g 101000 lxc_shares
# Nel caso il contenitore sia unprivileged
groupadd -g 1000 lxc_shares
In questo modo se voglio dare accesso al NAS ad un determinato utente non devo far altro che aggiungerlo al gruppo ed il gioco è fatto. Facendo un esempio con Plex su contenitore lxc
# Verifico l'utente proprietario del servizio
systemctl show -pUser,UID plexmediaserver
In questo modo scopro che l’utente plex è il proprietario del servizio plexmediaserver. Aggiungo quindi l’utente plex al gruppo lxc_shares
# Aggiungo l'utente al gruppo
usermod -aG lxc_shares plex
In questo modo potrò accedere al NAS da Plex.
Lascia un commento