web-dev-qa-db-fra.com

Comment partager un répertoire entre un conteneur LXC et l'hôte?

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é?

12
Max

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
12
Max

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
11
Jorge Castro

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

  • À l'intérieur du conteneur, nous devrions pouvoir écrire dans le répertoire.
  • En dehors du conteneur, nous devrions pouvoir écrire dans les fichiers et les répertoires créés à l'intérieur du conteneur.

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 breakdsname__, dont les uid et gid sont 1000.

J'ai ensuite créé un utilisateur dans le conteneur appelé debianname__, 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.

4
BreakDS

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
1
apokluda