Comment partager un dossier entre le système hôte (Ubuntu 14.04) et un conteneur ubuntu Lxc?
J'ai essayé de monter le dossier sur l'hôte:
Sudo mount --bind /media/data/share /media/data/container/name/rootfs/share
mais je ne vois aucun fichier.
C'est la même chose pour:
Sudo ln -s /media/data/share /media/data/container/name/rootfs/share
Dois-je modifier les autorisations pour le dossier partagé?
J'ai trouvé un article sur le wiki openSUSE: https://en.opensuse.org/User:Tsu2/LXC_mount_shared_directory
J'ai suivi les étapes et ça fonctionne maintenant.
Créer un répertoire hôte:
mkdir /media/data/share && chmod 7777 /media/data/share
Créer un répertoire dans le conteneur lxc:
mkdir /share
Éditez le fichier de configuration lxc sur l'hôte:
nano /var/lib/lxc/containername/config
lxc.mount.entry = /media/data/share share none ro,bind 0.0
Selon la documentation LXC vous pouvez le faire via un conteneur privilégié:
lxc launch ubuntu priv -c security.privileged=true
lxc config device add priv homedir disk source=/home/$USER path=/home/ubuntu
Voici ce que j'ai fait pour monter l'un de mes répertoires d'hôte sur le conteneur. C’est plus compliqué que ça en a l'air parce que nous aimerions atteindre
Après avoir lu divers articles en ligne (le plus utile est ce problème de github ), voici comment résoudre ce problème. L'astuce consiste à mapper les uid et gid de l'utilisateur hôte sur les uid et gid de l'utilisateur à l'intérieur du conteneur.
Supposons que je monte /home/breakds/projects
exactement au même endroit dans le conteneur. Le répertoire externe appartient à l'utilisateur breakds
name__, dont les uid et gid sont 1000
.
J'ai ensuite créé un utilisateur dans le conteneur appelé debian
name__, dont l'ID et le gid se trouvaient être également 1000
(car il s'agit du premier utilisateur non root). Je créerai ensuite un (lxc) profie sur l'hôte en
lxc profile edit breakds
Et ci-dessous se trouve le contenu du profil (je crois qu’il est au format yaml):
name: breakds
config:
raw.lxc: |
lxc.id_map =
lxc.id_map = u 0 165536 999
lxc.id_map = g 0 165536 999
lxc.id_map = u 1000 1000 1
lxc.id_map = g 1000 1000 1
lxc.id_map = u 1001 166537 64535
lxc.id_map = g 1001 166537 64535
user.vendor-data: |
packages:
- bash
description: allow home dir mounting for breakds
devices:
eth0:
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
projects:
path: /home/breakds/projects
source: /home/debian/projects
type: disk
Ensuite, appliquez ce profil à ce conteneur de manière permanente:
$ lxc profile apply <my container> breakds
Cela devrait faire l'affaire.
NOTE: Veuillez noter qu'avant de passer à ce profil, assurez-vous que tous les répertoires ou fichiers dont le propriétaire/groupe est debian doivent être supprimés (et probablement recréé après le changement). En effet, après le mappage uid et gid, leur propriété deviendra invalide. Au départ, je pensais que puisque tout en cartographiant de 1 000 à 1 000, tout allait bien se passer, mais je pense avoir manqué quelque chose ici et ce serait formidable si quelqu'un peut donner des conseils sur la façon de résoudre ce problème sans le piratage.
Vous pouvez également le faire sans LXD en modifiant directement le fichier de configuration LXC:
# Container specific configuration
lxc.idmap = u 0 165536 1000
lxc.idmap = g 0 165536 1000
lxc.idmap = u 1000 1000 1
lxc.idmap = g 1000 1000 1
lxc.idmap = u 1001 166536 64535
lxc.idmap = g 1001 166536 64535
Vous devez également vous assurer que le compte de l'utilisateur du conteneur est autorisé à mapper vers uid/gid 1000 sur l'hôte en modifiant/etc/subuid et/etc/subgid:
containeruser:165536:65536
containeruser:1000:1