LXC: ฉันจะติดตั้งโฟลเดอร์จากโฮสต์กับภาชนะได้อย่างไร


24

ฉันกำลังพยายามติดตั้งโฟลเดอร์บนโฮสต์กับคอนเทนเนอร์ LXC

โฮสต์มีโฟลเดอร์ที่/mnt/ssd/solr_dataสร้างขึ้น (ปัจจุบันอยู่ในระบบไฟล์รูท แต่ต่อมาฉันจะเมานไดรฟ์ SSD ที่นั่นดังนั้นฉันจึงเตรียมการไว้แล้ว)

ฉันต้องการให้โฟลเดอร์นั้นเมานต์เหมือน/dataในคอนเทนเนอร์

ดังนั้นในไฟล์ fstab ภาชนะฉันมีดังต่อไปนี้:

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        ext4    defaults,noatime        0       0

แต่นั่นเป็นไม่ไปฉันได้รับข้อผิดพลาดนี้เริ่มภาชนะ:

lxc-start: No such file or directory - failed to mount '/mnt/ssd/solr_data' on '/usr/lib/x86_64-linux-gnu/lxc//data'
lxc-start: failed to setup the mounts for 'Solr4StandAlone'
lxc-start: failed to setup the container
lxc-start: invalid sequence number 1. expected 2
lxc-start: failed to spawn 'Solr4StandAlone'

คำตอบ:


16

ในการสร้างไดเรกทอรีโดยอัตโนมัติในคอนเทนเนอร์คุณสามารถเพิ่มcreate=dirตัวเลือกใน fstab ได้:

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind,create=dir

แก้ไข: นี่คือเฉพาะ LXC ดูกระทู้นี้

เช่นเดียวกับที่เรามี "ทางเลือก" อยู่แล้วสิ่งนี้จะเพิ่มแฟล็กเมานต์เฉพาะ LXC ใหม่สองรายการ:

  • สร้าง = dir (จะทำ mkdir_p บนเส้นทาง)

  • สร้างไฟล์ = (จะทำ mkdir_p ใน dirname + fopen บนเส้นทาง)

สิ่งนี้ได้รับแรงบันดาลใจจากการผูกยึดที่จำเป็นบางอย่างสำหรับภาชนะที่ไม่ได้รับสิทธิพิเศษ


1
รุ่นmountนี้ใช้กับอะไร? ฉันไม่พบตัวเลือกที่อธิบายไว้ในmount(8)Ubuntu 14.04
0xC0000022L

ยังไม่อยู่ในล่าสุดmount(8)
0xC0000022L

2
แน่นอน ... ดูเหมือนว่าจะทำงานกับ lxc เท่านั้น ดูกระทู้นี้ใน lxc-devel ML
เพื่อนน้อย

14

ในการ/var/lib/lxc/Solr4StandAlone/configเพิ่มการอ่านบรรทัด:

lxc.mount.entry = /mnt/ssd/solr_data  /var/lib/lxc/Solr4StandAlone/rootfs/data none bind 0 0

จากนั้นlxc-stopหยุดคอนเทนเนอร์และlxc-startคอนเทนเนอร์ของคุณอีกครั้ง

นั่นคือทั้งหมดที่จำเป็น

อ้างอิง: ลิงค์อ้างอิง


2
โซลูชันของคุณควรได้รับการตรวจสอบที่ดีขึ้นเนื่องจากสามารถใช้งานกับเครื่องมือคอนเทนเนอร์ LXC ที่ไม่ได้รับสิทธิพิเศษ อีกอันหนึ่งจะไม่ทำงานในกรณีนี้ และอาจจะต้องใช้ selinux / apport เพื่อให้วิธีการของพวกเขา +1 สำหรับทางออกของคุณ!
Huygens

11

ฉันต้องสร้าง/dataโฟลเดอร์ในคอนเทนเนอร์ภายในก่อนที่การเมานต์จะทำงานอย่างถูกต้อง

ฉันยังใช้รายการ fstab นี้:

/mnt/ssd/solr_data      /var/lib/lxc/Solr4StandAlone/rootfs/data        none   bind     0       0

bindตัวเลือกการเมานต์เป็นสิ่งที่ขาดหายไปใน OP ฉันเชื่อว่ามันเป็นสิ่งที่สำคัญที่สุดในการแก้ไข
imz - Ivan Zakharyaschev

9

ตั้งแต่วันที่ 2015/09/30 การเปลี่ยนแปลงที่เกิดจากแพทช์รักษาความปลอดภัยจะหยุดการเมานต์ไปยังพา ธ สัมบูรณ์ด้วย lxc.mount.entry ในไฟล์ปรับแต่ง

คุณสามารถใช้เส้นทางสัมพัทธ์แทนได้

 lxc.mount.entry = /mnt/ssd/solr_data data none bind 0 0

ดู: https://wiki.debian.org/LXC#Bind_mounts_inside_the_container


ยิ่งไปกว่านั้นมันทำงานเป็นคำตอบมันจะได้รับการอัปเดตเพื่อให้ผู้คนเห็นในไม่ช้า ขอบคุณที่เพิ่มมัน!
David Parks

6

เนื่องจาก LXC เปลี่ยนแปลงไปตามกาลเวลาสิ่งนี้จึงเป็นเรื่องง่ายมาก แต่มันทำให้ฉันงงเล็กน้อย ฉันยังสร้างส่วนสำคัญสำหรับเรื่องนี้เพื่อให้ฉันสามารถจำตัวเอง แต่เพียงแค่ใช้อุปกรณ์ lxc config จะทำเคล็ดลับ

sudo lxc config device add Solr4StandAlone sdb disk source=/var/lib/lxc/Solr4StandAlone/rootfs/data path=mnt/ssd/solr_data

หมายเหตุเป็นสิ่งสำคัญที่ต้องปล่อยเครื่องหมายทับด้านหน้าออกจากอาร์กิวเมนต์ของเส้นทางเนื่องจากการเปลี่ยนแปลงที่ @biscuitNinja พูดถึง

การเมาต์ไดเร็กทอรีจากคอนเทนเนอร์ไปยังโฮสต์


1

หากคุณใช้libvirtเพื่อสร้างที่lxcเก็บของคุณคุณสามารถสร้างไดเรกทอรีบนโฮสต์ให้passthroughเป็นดังที่แสดงที่นี่:

root@localhost:/# cat /etc/libvirt/lxc/my_container.xml
...
 <filesystem type='mount' accessmode='passthrough'>
    <source dir='<dir on host>'/>
    <target dir='<dir on container>'/>
 </filesystem>
....
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.