web-dev-qa-db-fra.com

Montez le répertoire invité LXD sans détruire les données et la propriété

J'ai créé un invité LXD pour héberger mon serveur web, et pour accéder facilement à la racine du document, j'ai fait:

lxc config device add guest sharedhtml disk path=/document/root/ source=/home/$USER/public_html

Cela a fait deux choses:

  • complètement remplacé /document/root/ avec public_html/ (tous les fichiers de serveur Web par défaut ont disparu, comme public-html est vide)
  • détruit /document/root paramètres de propriété; le répertoire et les fichiers que je crée dans public_html/ appartient maintenant à nobody:nogroup

Si je comprends bien, cela ressemble plus à une monture inversée; au lieu de monter le répertoire de l'invité, le répertoire de l'hôte est monté à force dans l'invité.

Comment puis-je monter le répertoire invité dans l'hôte sans détruire le contenu existant pour que les modifications héritent des paramètres de propriété du répertoire invité?

Bonus: comment supprimer le device qui monte le répertoire?

1
Oxwivi

Pour supprimer l'entrée que vous avez créée, procédez comme suit:

lxc config device remove sharedhtml

Maintenant, il semble que LXD ait fait exactement ce qu'il était censé faire dans ce cas. La commande que vous avez exécutée demande à LXD de monter/home/$ USER/public_html depuis l'hôte dans le conteneur en tant que conteneur/document/root

Comme les conteneurs LXD s'exécutent à l'aide d'une carte uid/gid différente de l'hôte, la propriété des fichiers de l'hôte ne peut pas être restituée à l'intérieur du conteneur, ce qui conduit le noyau à les afficher comme personne: nogroup.

Il n'y a aucun mécanisme pour qu'un chemin à l'intérieur du conteneur soit monté sur l'hôte et il est peu probable que nous ajoutions une telle chose de sitôt.

Quoi qu'il en soit, dans votre cas, ce que vous devriez probablement faire, c'est avoir un chemin de stockage sur l'hôte pour les fichiers de votre serveur Web, puis avoir cette configuration comme entrée de disque de périphérique dans LXD pour le monter au bon endroit à l'intérieur du conteneur.

Ensuite, définissez les ACL POSIX sur l'hôte afin que l'ID/le gid du conteneur puissent accéder aux fichiers et à votre propre utilisateur également.

Dans la plupart des cas, l'uid et le gid du conteneur sur l'hôte seront 165536 + uid ou gid à l'intérieur du conteneur. Un moyen plus facile de comprendre cela est d'avoir le chemin sur l'hôte accessible en écriture temporairement, puis d'écrire quelque chose sur le chemin à l'intérieur du conteneur et de confirmer qui apparaît comme propriétaire sur l'hôte.

1
stgraber