J'ai expérimenté avec LXC / LXD sur Ubuntu 14.04 et tout fonctionne très bien. J'ai juste besoin de comprendre comment faire fonctionner les répertoires partagés entre ma machine hôte et un conteneur afin que je puisse abandonner Virtualbox une fois pour toutes.
J'ai vu cette page: https://wiki.gentoo.org/wiki/LXD
Ce qui fournit des instructions, mais je continue de recevoir des erreurs.
Quelqu'un connaît-il des instructions simples et claires pour que cela fonctionne? Toute aide très appréciée.
lxc config device add confexample sharedtmp disk path=/tmp source=/tmp/shared
. Mais en regardant le répertoire sur le conteneur, le propriétaire et le groupe des fichiers sont définis sur «personne» et «nogroupe» et le montage est en lecture seule.lxc file
pour transférer des fichiers entre l'hôte et le conteneur, en utilisantpush
etpull
.Réponses:
Les instructions sur https://wiki.gentoo.org/wiki/LXD que vous mentionnez sont correctes mais peuvent nécessiter un peu plus d'explications.
Sur l'hôte, vous vérifiez d'abord la propriété du répertoire dans lequel les données du conteneur sont stockées. Courir
et vérifiez le propriétaire du conteneur avec lequel vous souhaitez partager le répertoire. Dans mon cas, le
uid
et lesgid
deux étaient 100000.Ensuite, utilisez-les pour modifier la propriété du répertoire que vous souhaitez partager:
Partagez le répertoire avec le conteneur de la manière que vous avez indiquée dans votre commentaire:
Maintenant, dans le conteneur, vous verrez que le répertoire
/tmp/share_on_guest
(je ne conseillerais pas de monter votre répertoire car/tmp
parce qu'il est utilisé par le système pour d'autres choses et a des autorisations spéciales) appartient à root. À partir de là, vous pouvez utiliserchown
dans le conteneur pour changer la propriété en appropriéeuid
etgid
pour votre utilisateur dans le conteneur.En remarque, après avoir changé la propriété du conteneur par exemple en un utilisateur avec
uid
33, vous verrez sur l'hôte qu'iluid
y a maintenant 100033, ce qui est tout à fait logique.la source
/var/lib/lxd/containers
celui pointé vers/var/lib/lxd/storage-pools/lxd/containers
(dans ce cas, le dernierlxd
bit est le nom de mon pool de stockage ZFS). Tous les conteneurs là-bas semblaient avoir le même 165536 uid / gid lors de l'exécution et détenus parroot:root
lorsqu'ils étaient éteints.lxc config
et cela a fonctionné comme un charme!Voici une réponse mise à jour à cette question.
Montez le dossier hôte
/var/www
comme/var/test
dans le conteneur.la source
Vous pouvez affecter des périphériques supplémentaires au conteneur, et ceux-ci peuvent être des dossiers accessibles à l'hôte.
Notez que ce
<device>
n'est qu'un nom arbitraire que vous attribuez, qui sera utilisé comme ID pour la gestion ultérieure des appareils.Par exemple, pour monter le dossier hôte "./host" en tant que "/ mnt / host" dans le conteneur ...
Il reste un problème - si vous souhaitez que ce dossier soit accessible en écriture par l'hôte et le conteneur, la propriété et les autorisations doivent être configurées en conséquence. Ceci est compliqué par le mode par défaut de LXD qui virtualise les plages numériques pour les
id
valeurs d' utilisateur et de groupe . Il existe cependant une solution simple : contournez cette virtualisation en configurant le conteneur pour qu'il s'exécute avec des privilèges équivalents à l'hôte ...Les implications complètes de cette approche sur la sécurité de l'hôte ne me sont pas claires pour le moment, mais elles semblent être quelque peu «contenues» par la virtualisation. Le risque pratique dépend de comment et pourquoi vous utiliserez le conteneur. Voir les notes techniques sur https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers
Notez en outre que cette approche fonctionne probablement mieux si vous travaillez normalement dans le conteneur en tant qu'utilisateur non root, comme si vous vous connectez avec ...
la source
env
est différent, en particulierhttp_proxy
. Un exemple DEPANNAGE:sudo http_proxy=http://[fe80::1%eth0]:13128 apt-get update
.http_proxy
, je pense que la solution la plus simple est probablement d'activer IPV4 comme discuté ici .sudo dhclient
dans le récipient - ou le changementmanual
dedhcp
dans50-cloud-init.cfg
. De bonsSur la base de l' excellente réponse de ph0t0nix , je propose l'approche étape par étape suivante pour mon serveur Ubuntu 18.04:
Dans l'hôte, déterminez l'UID du propriétaire de rootfs:
Dans le conteneur, déterminez l'UID d'ubuntu (c'est-à-dire l'utilisateur dans le conteneur):
Créez un dossier partagé dans l'hôte et ajoutez-le au conteneur:
Ajustez l'UID de l'hôte du dossier partagé (UID = hôte UID + invité UID):
L'invité (utilisateur ubuntu) a désormais accès au dossier partagé et peut ajuster l'accès du conteneur au dossier partagé à l'aide de
chmod
.la source
J'ai maintenant une solution sûre et fonctionnelle à ce problème, en utilisant des profils LXD pour gérer le mappage entre UID et GID dans le conteneur et sur l'hôte.
Un résumé très utile peut être trouvé ici:
https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8
la source
0777
autorisations «s'il vous plaît-pirater-mon-système-et-détruire-mes-données» sans raison apparente! Il n'y a presque jamais de raison à cela, car cela peut être évité avec des modifications plus sensibles comme le changement de propriété (de groupe). -1