Eksperymentowałem z LXC / LXD na Ubuntu 14.04 i wszystko działa świetnie. Muszę tylko dowiedzieć się, jak udostępnić katalogi współdzielone między moją maszyną hosta a kontenerem, aby móc raz na zawsze porzucić Virtualbox.
Widziałem tę stronę: https://wiki.gentoo.org/wiki/LXD
Które zawiera instrukcje, ale wciąż otrzymuję błędy.
Czy ktoś zna jakieś proste, jasne instrukcje, aby to zadziałało? Każda pomoc bardzo doceniana.
lxc config device add confexample sharedtmp disk path=/tmp source=/tmp/shared
. Ale patrząc na katalog w kontenerze, właściciel i grupa plików w nim są ustawione na „nobody” i „nogroup”, a mount jest tylko do odczytu.lxc file
do przeniesienia plików między hostem a kontenerem, używającpush
ipull
.Odpowiedzi:
Wymienione instrukcje na https://wiki.gentoo.org/wiki/LXD są poprawne, ale mogą wymagać nieco więcej wyjaśnień.
Na hoście najpierw sprawdź własność katalogu, w którym przechowywane są dane kontenera. Biegać
i sprawdź właściciela kontenera, któremu chcesz udostępnić katalog. W moim przypadku
uid
igid
oba były 100000.Następnie użyj tych, aby zmienić własność katalogu, który chcesz udostępnić:
Udostępnij katalog kontenerowi w sposób wskazany w komentarzu:
Teraz w kontenerze zobaczysz, że katalog
/tmp/share_on_guest
(nie radziłbym montować twojego katalogu,/tmp
ponieważ jest używany przez system do innych rzeczy i ma specjalne uprawnienia) jest własnością root. Odtąd możesz używaćchown
w kontenerze, aby zmienić własność na odpowiedniąuid
igid
dla swojego użytkownika w kontenerze.Na marginesie, po zmianie właściciela w kontenerze na np. Użytkownika z
uid
33, zobaczysz na hoście,uid
że jest teraz 100033, co ma sens.źródło
/var/lib/lxd/containers
tego, na który wskazywałem/var/lib/lxd/storage-pools/lxd/containers
(w tym przypadku ostatnimlxd
bitem jest nazwa mojej puli pamięci ZFS). Wydaje się, że wszystkie kontenery mają ten sam identyfikator UID / gid 165536 podczas pracy i są własnością,root:root
gdy są wyłączone.lxc config
i działało to jak urok!Oto zaktualizowana odpowiedź na to pytanie.
Zamontuj folder hosta
/var/www
jak/var/test
w kontenerze.źródło
Do kontenera można przypisać dodatkowe urządzenia , które mogą być folderami dostępnymi dla hosta.
Pamiętaj, że
<device>
to tylko dowolna przypisana nazwa, która będzie używana jako identyfikator do późniejszego zarządzania urządzeniem.Na przykład, aby zamontować folder hosta „./host” jako „/ mnt / host” w kontenerze ...
Pozostaje jeden problem - jeśli chcesz, aby ten folder był zapisywalny zarówno przez hosta, jak i kontener, należy odpowiednio skonfigurować własność i uprawnienia. Komplikuje to domyślny tryb LXD, który wirtualizuje zakresy liczbowe dla wartości użytkowników i grup
id
. Istnieje jednak proste rozwiązanie : ominąć tę wirtualizację, konfigurując kontener do działania z uprawnieniami równoważnymi z hostem ...Pełne konsekwencje tego podejścia dla bezpieczeństwa hosta są dla mnie niejasne, ale wydaje się, że wirtualizacja jest nieco „ograniczona”. Praktyczne ryzyko zależy od tego, jak i dlaczego będziesz używać pojemnika. Zobacz uwagi techniczne na https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers
Zwróć też uwagę, że to podejście prawdopodobnie działa najlepiej, jeśli normalnie operujesz w kontenerze jako użytkownik inny niż root, na przykład jeśli łączysz się z ...
źródło
env
w szczególności jest inaczejhttp_proxy
. Przykładem rozwiązania:sudo http_proxy=http://[fe80::1%eth0]:13128 apt-get update
.http_proxy
, myślę, że łatwiejszym rozwiązaniem jest prawdopodobnie włączenie IPV4, jak omówiono tutaj .sudo dhclient
w pojemniku - lub zmianymanual
dodhcp
w50-cloud-init.cfg
. Ładne wskazówki tutaj: github.com/lxc/lxd/issues/1298W oparciu o doskonałą odpowiedź ph0t0nix , proponuję następujące podejście krok po kroku dla mojego serwera Ubuntu 18.04:
W hoście określ identyfikator UID właściciela rootfs:
W kontenerze określ UID Ubuntu (tj. Użytkownik w kontenerze):
Utwórz folder współdzielony na hoście i dodaj go do kontenera:
Dostosuj identyfikator UID hosta folderu współdzielonego (UID = host UID + gość UID):
Gość (użytkownik ubuntu) ma teraz dostęp do folderu współdzielonego i może dostosować dostęp do folderu współdzielonego do folderu współdzielonego za pomocą
chmod
.źródło
Mam teraz działające, bezpieczne rozwiązanie tego problemu, używając profili LXD do obsługi mapowania między UID i GID w kontenerze i na hoście.
Bardzo przydatną treść można znaleźć tutaj:
https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8
źródło
0777
aka uprawnień „proszę hack-mój-system-i-zniszcz-moje-dane” bez wyraźnego powodu! Prawie nigdy nie ma tego powodu, ponieważ można tego uniknąć dzięki bardziej sensownym modyfikacjom, takim jak zmiana własności (grupy). -1