मैं LXC कंटेनर और होस्ट के बीच एक निर्देशिका कैसे साझा करूं?


15

मैं होस्ट सिस्टम (ubuntu 14.04) और एक ubuntu lxc कंटेनर के बीच एक फ़ोल्डर कैसे साझा कर सकता हूं?

मैंने होस्ट पर फ़ोल्डर बढ़ते की कोशिश की:

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

लेकिन मैं कोई फाइल नहीं देख सकता।

उसके लिए भी यही:

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

क्या मुझे शेयर फ़ोल्डर के लिए अनुमतियां बदलने की आवश्यकता है?

जवाबों:


13

LXC प्रलेखन के अनुसार आप एक विशेषाधिकार प्राप्त कंटेनर के माध्यम से ऐसा कर सकते हैं:

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

ध्यान दें, कि एलएक्सडी प्रलेखन है, एलएक्ससी नहीं। यदि आपने LXD स्थापित नहीं किया है, तो lxc कमांड काम नहीं करेगा।
सैम बुल

@SamBull, यह LXC / LXD टीम द्वारा स्व-प्रेरित है। LXC का उपयोग liblxc (अंतर्निहित लाइब्रेरी) या LXD क्लाइंट (नाम lxd) को संदर्भित करने के लिए किया जा सकता है, जैसा कि इस उत्तर में या LXC के लिए उपयोग किया जाता है (सॉफ्टवेयर और "पुराने" टूलसेट, जिसका lxc-*नाम उपकरण के साथ है) या प्रोजेक्ट (जहां LXC है) LinuX कंटेनरों के लिए छोटा है)। यही कारण है कि मैंने यूनिक्स.ईएस मेटा पर यह प्रश्न पूछा है ।
0xC0000022L

12

मुझे खुली हुयी विकि में एक लेख मिला: https://en.opensuse.org/User:Tsu2/LXC_mount_sared_directory

मैंने चरणों का पालन किया और यह अब काम करता है।

होस्ट निर्देशिका बनाएं:

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

निर्देशिका को lxc कंटेनर में बनाएँ:

mkdir /share

होस्ट पर lxc config फाइल संपादित करें:

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

क्या केवल पढ़ने के लिए उस माउंट प्रविष्टि को परिभाषित करने के पीछे एक कारण है? साझा फाइल सिस्टम पर डेटा वापस लिखने के लिए कंटेनर से बचने के लिए क्या यह एक अच्छा सुरक्षा अभ्यास है?
jgomo3

1
मेरे लिए काम किया। ध्यान दें कि रिश्तेदार पथ के लिए इस्तेमाल shareमें lxc.mount.entryमहत्वपूर्ण है।
HRJ

1
आपको माउंट बिंदु बनाने की आवश्यकता नहीं है, यदि आप 'जोड़ते हैं', 'बाँध' के बाद = dir बनाएँ। मैंने 'आरओ' भाग को भी हटा दिया है, और यह ठीक काम कर रहा है।
सैम बुल

4

नीचे मैंने अपने एक होस्ट निर्देशिका को कंटेनर में माउंट करने के लिए किया है। यह मुश्किल है क्योंकि यह लगता है क्योंकि हम हासिल करना चाहते हैं

  • कंटेनर के अंदर हमें निर्देशिका में लिखने में सक्षम होना चाहिए।
  • कंटेनर के बाहर हमें कंटेनर के अंदर बनाई गई फ़ाइलों और निर्देशिकाओं को लिखने में सक्षम होना चाहिए।

ऑनलाइन विभिन्न लेखों को पढ़ने के बाद (सबसे उपयोगी एक यह गितुब मुद्दा है ), यहां बताया गया है कि मैं इसे कैसे हल करता हूं। ट्रिक को होस्ट यूजर के यूआईडी और जीआईडी ​​को यूजर्स के यूआईडी और जीआईडी ​​को कंटेनर के अंदर मैप करना है।

मान लीजिए कि मैं /home/breakds/projectsकंटेनर में ठीक उसी स्थान पर माउंट करने जा रहा हूं । बाहरी निर्देशिका का स्वामित्व उपयोगकर्ता के पास होता है breakds, जिसका uid और gid होता है 1000

मैंने तब कंटेनर में एक उपयोगकर्ता बनाया debian, जिसका uid और gid भी हुआ 1000(क्योंकि यह पहला गैर रूट उपयोगकर्ता है)। मैं तब होस्ट पर एक (lxc) प्रोफाइल बनाऊंगा

lxc profile edit breakds

और नीचे प्रोफ़ाइल की सामग्री है (मेरा मानना ​​है कि यह 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

फिर, उस कंटेनर में इस प्रोफ़ाइल को स्थायी रूप से लागू करें:

$ lxc profile apply <my container> breakds

यह काम कर जाना चाहिए।

नोट : कृपया ध्यान दें कि इस प्रोफ़ाइल पर स्विच करने से पहले, सुनिश्चित करें कि सभी direcotries या फ़ाइलें जिनके स्वामी / समूह को डेबियन हटा दिया गया है (और शायद स्विच के बाद फिर से बनाया गया है)। ऐसा इसलिए है क्योंकि यूआईडी और जीआईडी ​​मैपिंग के बाद, उनका स्वामित्व अमान्य हो जाएगा। मैंने मूल रूप से सोचा था कि मैं सिर्फ 1000 से 1000 मैपिंग कर रहा हूं, सब कुछ ठीक होना चाहिए, लेकिन मुझे लगता है कि मैंने यहां कुछ याद किया और यह बहुत अच्छा होगा अगर कोई हैक के बिना इसे हल करने के बारे में सलाह दे सकता है।


लेकिन आप हमेशा chownमेजबान से हो सकते हैं ।
iBug

1

आप इसे LXD के बिना भी कर सकते हैं 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

आपको यह भी सुनिश्चित करना होगा कि कंटेनर के उपयोगकर्ता के खाते को संपादन / आदि / सब्यूड और / आदि / सबगिड द्वारा होस्ट पर uid / gid 1000 में मैप करने की अनुमति दी गई है:

containeruser:165536:65536
containeruser:1000:1

क्या सिस्टम प्रोसेस / निर्मित / आदि / सब्यूड? ओपनर के पास ऐसा नहीं है।
एमसीआर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.