Làm cách nào để chia sẻ thư mục giữa container LXC và máy chủ?


14

Làm cách nào tôi có thể chia sẻ một thư mục giữa hệ thống máy chủ (ubfox 14.04) và bộ chứa lxc ubfox?

Tôi đã thử gắn thư mục trên máy chủ:

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

nhưng tôi không thể xem bất kỳ tập tin nào

Tương tự đối với:

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

Tôi có cần thay đổi quyền cho thư mục chia sẻ không?

Câu trả lời:


12

Tôi đã tìm thấy một bài viết trong wiki openSUSE: https://en.opensuse.org/User:Tsu2/LXC_mount_ Shared_directory

Tôi đã làm theo các bước và nó hoạt động bây giờ.

Tạo thư mục máy chủ:

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

Tạo thư mục trong lxc container:

mkdir /share

Chỉnh sửa tập tin cấu hình lxc trên máy chủ:

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

Có một lý do đằng sau việc xác định mục nhập đó là chỉ đọc? Đó có phải là một thực tiễn bảo mật tốt để tránh một container để ghi lại dữ liệu vào hệ thống tệp được chia sẻ?.
jgomo3 30/03/2016

1
Đã làm cho tôi. Lưu ý rằng đường dẫn tương đối được sử dụng sharetrong lxc.mount.entrylà rất quan trọng.
HRJ

1
Bạn không cần tạo điểm gắn kết, nếu bạn thêm ', tạo = dir' sau khi 'liên kết'. Tôi cũng đã xóa phần 'ro' và có vẻ như nó vẫn hoạt động tốt.
Sam Bull

12

Theo tài liệu LXC, bạn có thể thực hiện việc này thông qua một thùng chứa đặc quyền:

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

Lưu ý rằng, đó là tài liệu LXD, không phải LXC. Nếu bạn chưa cài đặt LXD, thì lệnh lxc sẽ không hoạt động.
Sam Bull

@SamBull tốt, điều này là tự gây ra bởi nhóm LXC / LXD. LXC có thể được sử dụng để chỉ liblxc (thư viện cơ bản) hoặc máy khách LXD (có tên lxd) như được sử dụng trong câu trả lời này hoặc cho LXC (phần mềm và bộ công cụ "cũ" với các công cụ có lxc-*tên) hoặc cho dự án (trong đó LXC là viết tắt của LinuX Container). Đó là lý do tôi hỏi câu hỏi này trên meta Unix.SE.
0xC0000022L

4

Dưới đây là những gì tôi đã làm để gắn một trong các thư mục máy chủ của tôi vào container. Điều này là khó khăn hơn âm thanh bởi vì chúng tôi muốn đạt được

  • Bên trong container chúng ta sẽ có thể ghi vào thư mục.
  • Bên ngoài vùng chứa, chúng ta sẽ có thể ghi vào các tệp và thư mục được tạo bên trong vùng chứa.

Sau khi đọc các bài viết khác nhau trực tuyến ( vấn đề hữu ích nhất là vấn đề github này ), đây là cách tôi giải quyết vấn đề này. Mẹo nhỏ là ánh xạ uid và gid của người dùng máy chủ đến uid và gid của người dùng bên trong container.

Giả sử tôi sẽ gắn kết /home/breakds/projectsvào cùng một vị trí trong container. Thư mục bên ngoài thuộc sở hữu của người dùng breakds, có uid và gid 1000.

Sau đó, tôi đã tạo một người dùng trong vùng chứa được gọi là debianuid và gid 1000cũng vậy (vì đó là người dùng không root đầu tiên). Sau đó tôi sẽ tạo một hồ sơ (lxc) trên máy chủ bằng cách

lxc profile edit breakds

Và dưới đây là nội dung của hồ sơ (tôi tin rằng nó ở định dạng 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

Sau đó, áp dụng hồ sơ này cho container đó vĩnh viễn:

$ lxc profile apply <my container> breakds

Cái này cần phải dùng mẹo.

LƯU Ý : Xin lưu ý rằng trước khi chuyển sang cấu hình này, hãy đảm bảo rằng tất cả các tệp direcotries hoặc tệp có chủ sở hữu / nhóm là debian sẽ bị xóa (và có thể được tạo lại sau khi chuyển đổi). Điều này là do sau khi ánh xạ uid và gid, quyền sở hữu của họ sẽ trở nên không hợp lệ. Ban đầu tôi nghĩ rằng tôi chỉ lập bản đồ 1000 đến 1000 mọi thứ sẽ ổn, nhưng tôi nghĩ rằng tôi đã bỏ lỡ điều gì đó ở đây và thật tuyệt nếu ai đó có thể tư vấn về cách giải quyết vấn đề này mà không cần hack.


Nhưng bạn luôn có thể chowntừ máy chủ.
iBug

1

Bạn cũng có thể làm điều này mà không cần LXD bằng cách chỉnh sửa trực tiếp tệp cấu hình 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

Bạn cũng phải đảm bảo rằng tài khoản của người dùng được cấp phép ánh xạ tới uid / gid 1000 trên máy chủ bằng cách chỉnh sửa / etc / subuid và / etc / subgid:

containeruser:165536:65536
containeruser:1000:1

những gì hệ thống xử lý / tạo / etc / subuid? Openwrt không có điều đó.
mcr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.