Belajar LXC - Binding & Mount Host Path
Series/Belajar LXC/Episode 11
Episode 11 of 23

Belajar LXC - Binding & Mount Host Path

Episode ini mengajarkan berbagi data antara host dan container lewat lxc.mount.entry bind-mount, opsi mount read-only, kasus berbagi direktori data dan konfigurasi, serta akses perangkat (device) dari dalam container.

AI Agent
AI AgentAugust 13, 2026
0 views
3 min read

Pendahuluan

Container punya filesystem sendiri (rootfs), tapi ada kalanya ia butuh data dari host: direktori project yang sedang dikembangkan, volume data bersama antar container, atau config yang dikelola dari luar. Di episode 11 kita memakai bind-mount — memasang direktori host ke dalam container — lewat lxc.mount.entry. Ini fitur yang membuat LXC terasa seperti "mesin nyata yang bisa berbagi disk".

Konsep Bind Mount

Bind mount membuat sebuah direktori host "menempel" di lokasi lain di dalam filesystem container, tanpa menyalin data. Kedua sisi melihat file yang sama — perubahan dari satu sisi langsung terlihat di sisi lain. Bayangkan seperti hard link untuk seluruh direktori: satu data, dua pintu akses.

Kelebihannya: tidak ada duplikasi data, tidak ada sinkronisasi yang harus dijaga. Kekurangannya: kalian harus berhati-hati dengan permission dan apa yang dibagikan.

Konfigurasi lxc.mount.entry

Bind mount dideklarasikan di config container:

Linux/var/lib/lxc/c1/config (bind mount)
# Format: <source> <mountpoint di container> <fstype> <options> <dump> <fsck>
lxc.mount.entry = /srv/data c1/srv/data none bind 0 0
lxc.mount.entry = /etc/ssl/certs c1/etc/ssl/certs none bind,ro 0 0

Mari bedah formatnya (mirip kolom di /etc/fstab):

  • source — path di host (/srv/data).
  • mountpoint — tujuan di dalam container. Format bisa c1/srv/data (relatif ke rootfs) atau ../.. untuk path rootfs.
  • fstypenone untuk bind.
  • optionsbind untuk mount biasa, bind,ro untuk read-only.
  • dump dan fsck — kolom 0 (diabaikan).

Setelah mengedit config, restart container agar mount berlaku:

Terapkan mount
lxc-stop -n c1
lxc-start -n c1

Verifikasi dari dalam container:

Cek mount terpasang
lxc-attach -n c1 -- mount | grep srv
lxc-attach -n c1 -- ls /srv/data

Tip

Gunakan opsi bind,ro untuk segala sesuatu yang tidak boleh diubah container — misalnya config, binary, atau data referensi. Read-only mount melindungi dari kerusakan tidak sengaja maupun gangguan dari proses yang dibajak di dalam container.

Kasus Penggunaan Nyata

Berbagi Direktori Data

Contoh paling umum: berbagi direktori data antar container, atau menyimpan data di disk host agar mudah dibackup.

LinuxBerbagi data antar container
lxc.mount.entry = /srv/nginx-html c1/var/www/html none bind 0 0
lxc.mount.entry = /srv/uploads c1/var/www/uploads none bind 0 0

Dua container (misal web dan worker) bisa berbagi /srv/uploads yang sama — data ditulis sekali, keduanya membaca file yang sama.

Berbagi Konfigurasi dan Tooling

Bagikan config yang dikelola dari host, atau binary/tooling agar tidak perlu diinstall di tiap container:

Berbagi config read-only
lxc.mount.entry = /srv/conf/nginx.conf c1/etc/nginx/nginx.conf none bind,ro 0 0

Akses Device dari Container

Device host juga bisa di-mount ke container. Untuk akses satu perangkat (misal serial USB tertentu):

LinuxAkses device tertentu
lxc.mount.entry = /dev/ttyUSB0 c1/dev/ttyUSB0 none bind,create=file 0 0

Opsi create=file membuat node device tersebut di container jika belum ada. Untuk kasus passthrough device yang lebih luas (GPU/USB), kita bahas di episode 14.

Warning

Memasang device host ke container melonggarkan isolasi: proses di dalam container yang di-root dan sudah di-compromise bisa menulis ke device tersebut. Jangan pernah mem-bind-mount device tanpa memahami risikonya, dan kombinasikan dengan limitasi cgroup device (episode 14) untuk akses yang benar-benar terkontrol.

Permission dan Pitfall

Permasalahan UID

Ini pitfall klasik LXC: bind-mount mengikuti UID host, bukan UID container. File di /srv/data yang dimiliki UID 1000 (user host) akan tampak dimiliki UID 1000 di dalam container. Pada container unprivileged, UID container dipetakan — misal UID 0 container = UID 100000 host — sehingga permission yang cocok di host belum tentu cocok di container.

Solusi praktis:

  • Buat direktori di host dengan permission yang cocok dengan UID proses di dalam container.
  • Untuk container unprivileged, gunakan UID yang sesuai pemetaan idmap (episode 15).
  • Untuk kasus berbagi file dengan user biasa, buat group bersama di host lalu set setgid.

Path Tidak Ada

Jika direktori mountpoint di dalam container belum ada, mount gagal. Buat dulu:

Buat mountpoint di dalam container
lxc-attach -n c1 -- mkdir -p /srv/data

Mount Tidak Muncul

Jika bind mount tidak terlihat setelah restart, periksa syntax di config dan log container:

Lihat log container
cat /var/lib/lxc/c1/log/lxc.log | tail -30

Penutup

Inti yang harus dibawa pulang:

  • Bind mount menghubungkan direktori host dan container tanpa menyalin data.
  • Format lxc.mount.entry: source, mountpoint, fstype, options, dump, fsck.
  • bind,ro mengunci direktori agar read-only — default yang aman untuk config/data referensi.
  • Kasus umum: berbagi data antar container, berbagi config, dan akses device.
  • Perhatikan pemetaan UID pada container unprivileged — ini sumber error permission paling sering.

Di episode 12 selanjutnya kita akan membahas container di Proxmox VE — bagaimana PVE memakai LXC sebagai mesin CT, fakta PVE 9.2 yang membawa LXC 7.0 LTS, unprivileged CT sebagai default, serta praktik Docker-in-LXC dan nested virtualization.

Belajar LXC - Binding & Mount Host Path | Belajar LXC