ด้านล่างเป็นสิ่งที่ฉันได้ทำเพื่อติดตั้งหนึ่งในไดเรกทอรีโฮสต์ของฉันกับภาชนะ นี่มันยากกว่าที่คิดเพราะเราต้องการบรรลุ
- ภายในคอนเทนเนอร์เราควรจะสามารถเขียนไปยังไดเรกทอรี
- นอกคอนเทนเนอร์เราควรสามารถเขียนไฟล์และไดเรกทอรีที่สร้างขึ้นภายในคอนเทนเนอร์
หลังจากอ่านบทความต่าง ๆ ทางออนไลน์ (สิ่งที่มีประโยชน์ที่สุดคือปัญหา GitHub นี้ ) นี่คือวิธีที่ฉันจะแก้ปัญหานี้ เคล็ดลับคือการแม็พ uid และ gid ของโฮสต์ผู้ใช้กับ uid และ gid ของผู้ใช้ภายในคอนเทนเนอร์
สมมติว่าฉันกำลังจะเมานท์/home/breakds/projects
ไปยังตำแหน่งเดียวกันแน่นอนในภาชนะ ไดเรกทอรีนอกเป็นเจ้าของโดยผู้ใช้breakds
ที่มี UID และ GID 1000
เป็น
จากนั้นฉันสร้างผู้ใช้ในคอนเทนเนอร์ที่เรียกว่าdebian
มี uid และ gid เกิดขึ้น1000
ด้วย (เนื่องจากเป็นผู้ใช้ที่ไม่ใช่รูทคนแรก) ฉันจะสร้าง profie (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 หรือไฟล์ทั้งหมดที่มีเจ้าของ / กลุ่มเป็นเดเบียนควรถูกลบ (และอาจถูกสร้างขึ้นใหม่หลังจากสวิตช์) เนื่องจากหลังจากการแม็พ uid และ gid ความเป็นเจ้าของจะไม่ถูกต้อง ฉันคิดอย่างสร้างสรรค์ตั้งแต่ฉันทำแผนที่ 1,000 ถึง 1,000 ทุกอย่างน่าจะดี แต่ฉันคิดว่าฉันพลาดอะไรบางอย่างที่นี่และมันจะดีถ้ามีใครสามารถให้คำแนะนำในการแก้ไขปัญหานี้โดยไม่ต้องแฮ็ค