it-swarm.com.de

Wie teile ich ein Verzeichnis zwischen einem LXC-Container und dem Host?

Wie kann ich einen Ordner zwischen dem Host-System (Ubuntu 14.04) und einem Ubuntu LXC-Container freigeben?

Ich habe versucht, den Ordner auf dem Host zu mounten:

Sudo mount --bind /media/data/share /media/data/container/name/rootfs/share

aber ich kann keine dateien sehen.

Das gleiche gilt für:

Sudo ln -s /media/data/share /media/data/container/name/rootfs/share

Muss ich die Berechtigungen für den Freigabeordner ändern?

12
Max

Ich habe einen Artikel im openSUSE-Wiki gefunden: https://en.opensuse.org/User:Tsu2/LXC_mount_shared_directory

Ich folgte den Schritten und es funktioniert jetzt.

Erstellen Sie ein Host-Verzeichnis:

mkdir /media/data/share && chmod 7777 /media/data/share

Erstellen Sie ein Verzeichnis im lxc-Container:

mkdir /share

Bearbeiten Sie die lxc-Konfigurationsdatei auf dem Host:

nano /var/lib/lxc/containername/config
lxc.mount.entry = /media/data/share share none ro,bind 0.0
12
Max

Laut LXC-Dokumentation können Sie dies über einen privilegierten Container tun:

lxc launch ubuntu priv -c security.privileged=true
lxc config device add priv homedir disk source=/home/$USER path=/home/ubuntu
11
Jorge Castro

Im Folgenden wird beschrieben, wie ich eines meiner Host-Verzeichnisse in den Container geladen habe. Das ist kniffliger als es sich anhört, weil wir es erreichen möchten

  • Innerhalb des Containers sollten wir in das Verzeichnis schreiben können.
  • Außerhalb des Containers sollten wir in der Lage sein, in die im Container erstellten Dateien und Verzeichnisse zu schreiben.

Nachdem ich verschiedene Artikel online gelesen habe (der hilfreichste ist dieses Github-Problem ), hier ist, wie ich das löse. Der Trick besteht darin, die Benutzer-ID und die Benutzer-ID des Host-Benutzers der Benutzer-ID und der Benutzer-ID im Container zuzuordnen.

Angenommen, ich werde /home/breakds/projects genau an derselben Stelle im Container anbringen. Das externe Verzeichnis gehört dem Benutzer breakds, dessen UID und GID 1000 sind.

Ich habe dann einen Benutzer in dem Container namens debian erstellt, dessen UID und GID zufällig auch 1000 lauten (weil es der erste Benutzer ist, der kein Root-Benutzer ist). Ich erstelle dann einen (lxc) profie auf dem Host von

lxc profile edit breakds

Und unten ist der Inhalt des Profils (ich glaube, es ist im Yaml-Format):

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

Wenden Sie dann dieses Profil dauerhaft auf diesen Container an:

$ lxc profile apply <my container> breakds

Dies sollte den Trick machen.

NOTE: Bitte beachten Sie, dass vor dem Wechsel zu diesem Profil alle Verzeichnisse oder Dateien, deren Besitzer/Gruppe Debian ist, gelöscht werden sollten (und wahrscheinlich auch nach dem Wechsel neu erstellt). Dies liegt daran, dass nach der Zuordnung von UID und GID deren Besitz ungültig wird. Ich dachte ursprünglich, da ich nur 1000 bis 1000 abbilde, sollte alles in Ordnung sein, aber ich denke, ich habe hier etwas verpasst und es wäre großartig, wenn jemand einen Rat geben könnte, wie dies ohne den Hack gelöst werden kann.

4
BreakDS

Sie können dies auch ohne LXD tun, indem Sie die LXC-Konfigurationsdatei direkt bearbeiten:

# 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

Sie müssen auch sicherstellen, dass das Benutzerkonto des Containers die Berechtigung zum Zuordnen zu UID/GID 1000 auf dem Host erhält, indem Sie/etc/subuid und/etc/subgid bearbeiten:

containeruser:165536:65536
containeruser:1000:1
1
apokluda