Pertanyaan Menambahkan direktori host bersama ke LXC / LXD Container


Saya telah bereksperimen dengan LXC / LXD pada Ubuntu 14.04 dan semuanya bekerja dengan baik. Saya hanya perlu mencari tahu bagaimana cara mendapatkan direktori bersama yang bekerja di antara mesin host saya dan sebuah wadah sehingga saya dapat menyingkirkan VirtualBox sekali dan untuk selamanya.

Saya telah melihat halaman ini: https://wiki.gentoo.org/wiki/LXD

Yang memberikan instruksi, tetapi saya terus mendapatkan kesalahan.

Adakah yang tahu instruksi sederhana dan jelas untuk mendapatkan ini bekerja? Bantuan apa pun sangat dihargai.


14
2017-10-28 12:39


asal


Saya telah berhasil memasang direktori host menggunakan: lxc config device add confexample sharedtmp disk path=/tmp source=/tmp/shared. Tapi melihat direktori pada kontainer pemilik dan grup untuk file di sana diatur ke 'nobody' dan 'nogroup' dan mount hanya bisa dibaca. - user47227
Bisakah Anda menambahkan sedikit lebih detail? Apa persis apakah Anda melakukannya, apa yang ingin Anda capai dan apa yang terjadi? Apakah Anda menemukan pesan peringatan atau kesalahan apa pun? Harap reka ulang mereka secara keseluruhan dalam pertanyaan Anda. Anda dapat memilih, menyalin dan menempel konten terminal dan sebagian besar pesan dialog di Ubuntu. (Lihat Bagaimana saya mengajukan pertanyaan yang bagus?) - David Foerster
Dengan asumsi Anda menggunakan penampung yang tidak berhak dan pemetaan UID / GID adalah masalahnya, lihatlah bagian ini sebuah artikel tentang pemetaan userns dengan LXD. Namun, ini mungkin ditambahkan ke dalam cara LXD setelah Anda menanyakan pertanyaan Anda. - 0xC0000022L
Saya tidak tahu versi mana yang menambahkan ini (saya di 2.18) tetapi jika mungkin, Anda juga bisa menggunakan lxc file untuk mentransfer file antara host dan kontainer, menggunakan push dan pull. - code_dredd


Jawaban:


Instruksi pada https://wiki.gentoo.org/wiki/LXD yang Anda sebutkan sudah benar tetapi mungkin perlu sedikit penjelasan.

Pada host, Anda terlebih dahulu memeriksa kepemilikan direktori tempat data penampung disimpan. Menjalankan

sudo ls -l /var/lib/lxd/containers

dan periksa pemilik wadah yang ingin Anda bagikan direktori. Dalam kasus saya itu uid dan gid keduanya 100000.

Selanjutnya, gunakan ini untuk mengubah kepemilikan direktori yang ingin Anda bagikan:

sudo chown 100000:100000 /tmp/share_on_host

Bagikan direktori dengan penampung dengan cara yang Anda indikasikan di komentar Anda:

lxc config device add mycontainer sharedtmp disk \
                  path=/tmp/share_on_guest source=/tmp/share_on_host

Sekarang, di dalam wadah, Anda akan melihat bahwa direktori /tmp/share_on_guest (Saya tidak menyarankan untuk me-mount direktori Anda sebagai /tmp karena yang digunakan oleh sistem untuk hal-hal lain dan memiliki izin khusus) dimiliki oleh root. Mulai dari sini Anda dapat menggunakan chown dalam wadah untuk mengubah kepemilikan ke yang sesuai uid dan gid untuk pengguna Anda di penampung.

Sebagai catatan tambahan, setelah mengubah kepemilikan dalam penampung menjadi misalnya seorang pengguna dengan uid 33 Anda akan melihat pada host bahwa uid sekarang ada 100033, yang masuk akal total.


16
2018-03-05 21:42





Anda dapat menetapkan tambahan perangkat ke wadah, dan ini bisa menjadi folder yang dapat diakses host.

$ lxc config ## display help
...
lxc config device add [<remote>:]<container> <device> <type> [key=value...]
    Add a device to a container.
...

Perhatikan itu <device> adalah nama acak yang Anda tetapkan, yang akan digunakan sebagai ID untuk pengelolaan perangkat berikutnya.

Misalnya, untuk memasang folder host "./host" sebagai "/ mnt / host" dalam wadah ...

lxc config device add mycontainer vartest disk source=$(pwd)/host path=/mnt/host

Masih ada satu masalah - jika Anda ingin folder ini dapat ditulis oleh host dan wadah, kepemilikan dan izin harus dikonfigurasi dengan benar. Ini diperumit oleh mode default LXD yang memvirtualisasikan rentang numerik untuk pengguna dan grup id nilai-nilai. Namun ada solusi yang mudah: bypass virtualisasi ini dengan mengonfigurasi penampung agar dijalankan dengan hak istimewa yang setara dengan host ...

lxc config set <container> security.privileged true

Implikasi keamanan host sepenuhnya dari pendekatan ini tidak jelas bagi saya saat ini, tetapi tampaknya agak "terkandung" oleh virtualisasi. Risiko praktis tergantung pada bagaimana dan mengapa Anda akan menggunakan wadah. Lihat catatan teknis di https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers

Lebih lanjut perhatikan bahwa pendekatan ini mungkin berfungsi paling baik jika Anda biasanya beroperasi dalam penampung sebagai pengguna non-root, seperti jika Anda melampirkan ...

lxc exec zesty -- su --login ubuntu

3
2017-09-23 05:47



Ada masalah dengan login non-root: The env berbeda, khususnya http_proxy. Contoh solusi: sudo http_proxy=http://[fe80::1%eth0]:13128 apt-get update. - nobar
Mengenai http_proxySaya pikir solusi yang lebih mudah mungkin untuk mengaktifkan IPV4 seperti yang dibahas sini. - nobar
... diikuti oleh sudo dhclient dalam wadah - atau berubah manual untuk dhcp di 50-cloud-init.cfg. Petunjuk bagus di sini: github.com/lxc/lxd/issues/1298 - nobar
Ini benar-benar buruk ide. Merekomendasikan untuk beralih ke kontainer istimewa menumbangkan salah satu kemajuan yang dibawa oleh LXD. Sementara LXC 1.x juga menawarkan kemungkinan untuk menggunakan kontainer tidak beruntung (dan ya, bahkan sebagai root), itu sedikit lebih rumit untuk memilah detailnya. Dengan LXD, ini sudah menjadi masa lalu. Selain itu, apa yang begitu rumit tentang pengaturan ACL pada beberapa folder untuk memungkinkan UID sisi-host akses yang diperlukan atau menggunakan metode yang diuraikan di sini? Ya memetakan UID / GID bukan satu-satunya cara! - 0xC0000022L


Berikut ini jawaban yang diperbarui untuk pertanyaan ini.

Pasang folder host "/ var / www" sebagai "/ var / test" di penampung.

lxc config device tambahkan mycontainer vartest disk source = / var / www path = / var / test


1
2018-02-12 10:41



Selamat datang di Tanya Ubuntu! saya merekomendasi suntinging jawaban ini untuk mengembangkannya dengan rincian spesifik tentang cara melakukan ini. (Lihat juga Bagaimana saya menulis jawaban yang bagus? untuk saran umum tentang jenis jawaban apa yang dianggap paling berharga di AskUbuntu.) - David Foerster


Saya sekarang memiliki solusi, bekerja aman untuk masalah ini, menggunakan profil LXD untuk menangani pemetaan antara UID dan GID dalam wadah dan pada host.

Sebuah inti yang sangat berguna dapat ditemukan di sini:

https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8


0
2017-10-28 13:33



Perhatikan bahwa membuat hal-hal yang dapat ditulis dunia biasanya merupakan ide yang buruk dari sudut pandang keamanan. Anda mungkin harus melihat menggunakan POSIX ACL di jalur host, memberikan akses ke pengguna kontainer dengan menambahkan ACL khusus untuk uid itu, dan kemudian untuk setiap pengguna host lain yang juga membutuhkan akses tulis. - stgraber
@stgraber sementara saya setuju dengan apa yang Anda katakan, saya tidak tahu cara mengaturnya. Beberapa tautan akan sangat membantu. - s3v3n
Tolong jangan merekomendasikan 0777 a.k.a izin "tolong-hack-my-system-and-destroy-my-data" tanpa alasan yang jelas! Hampir tidak pernah ada alasan untuk itu karena dapat dihindari dengan modifikasi yang lebih masuk akal seperti mengubah (kelompok) kepemilikan. -1 - David Foerster
Saya mengerti maksud Anda, tetapi saya hanya menggunakannya sebagai solusi sementara pada mesin pengembangan pengguna tunggal, tanpa ada cara lain untuk membuatnya bekerja. Sejak itu saya telah menemukan bahwa menggunakan profil adalah cara untuk menangani ini, lihat jawaban yang saya edit di atas! - user47227
Apa yang begitu sulit tentang menggunakan ACL atau metode yang diuraikan di sini? - 0xC0000022L