Kapan hari saya perlu memindahkan data-root
directory docker dari kampung halamannya di /var/lib/docker
ke /mnt/storage-0/docker
karena persoalan ruang di partisi utama yang semakin menipis. Sebagai konteks, mesin ini menggunakan OS Centos 8 dengan SELinux: Enforcing
.
Kalau melihat dokumentasi yang ada, cara mindahin data-root
sebenernya ga ribet, langsung aja edit file /etc/docker/daemon.json
, dan tambahin line dibawah, copy semua file dari directory lama, terus restart docker daemonnya.
{
...
"data-root": "/mnt/storage-0/docker",
...
}
Sayangnya, ternyata tidak semudah itu Fergusso. Semua emang terlihat lancar sampai ketika saya menggunakan fitur buildkit. Command docker build ...
selalu gagal, dengan pesan error:
0.479 standard_init_linux.go:228: exec user process caused: permission denied
Refleklah ngecek audit.log
, akhirnya ketahuan kalau directory /mnt/storage-0/docker
belum dikasih label yang sesuai biar dikenali sama SELinux sebagai "rumah" nya si docker.
Isi lognya begini:
...
type=AVC msg=audit(1627476572.116:8223): avc: denied { entrypoint } for pid=277147 comm="runc:[2:INIT]" path="/bin/busybox" dev="overlay" ino=202821668 scontext=system_u:system_r:container_t:s0:c257,c579 tcontext=system_u:object_r:unlabeled_t:s0 tclass=file permissive=0
type=AVC msg=audit(1627478254.522:8273): avc: denied { entrypoint } for pid=287085 comm="runc:[2:INIT]" path="/bin/busybox" dev="overlay" ino=202821668 scontext=system_u:system_r:container_t:s0:c358,c450 tcontext=system_u:object_r:unlabeled_t:s0 tclass=file permissive=0
...
Yaudah, berarti tinggal dilabelin sesuai dengan label directory lamanya, ambil contekan dulu pakai command ini:
grep docker /etc/selinux/targeted/contexts/files/file_contexts | grep "/var/lib/docker
Copy yang sesuai dengan kasus, terus bikin command buat ngedefinisiin context mapping directory data-root
barunya si docker:
semanage fcontext -a -s system_u -t container_var_lib_t "/mnt/storage-0/docker(/.*)?";
semanage fcontext -a -s system_u -t container_ro_file_t "/mnt/storage-0/docker/.*/config\.env";
semanage fcontext -a -s system_u -t container_ro_file_t "/mnt/storage-0/docker/init(/.*)?";
semanage fcontext -a -s system_u -t container_ro_file_t "/mnt/storage-0/docker/overlay(/.*)?";
semanage fcontext -a -s system_u -t container_ro_file_t "/mnt/storage-0/docker/overlay2(/.*)?";
semanage fcontext -a -s system_u -t container_ro_file_t "/mnt/storage-0/docker/containers/.*/hosts";
semanage fcontext -a -s system_u -t container_log_t "/mnt/storage-0/docker/containers/.*/.*\.log";
semanage fcontext -a -s system_u -t container_ro_file_t "/mnt/storage-0/docker/containers/.*/hostname";
Abis eksekusi command diatas, terus jalanin command dibawah buat melabeli ulang directory tersebut secara rekursif sesuai dengan context yang tadi udah diset:
restorecon -Rv /mnt/storage-0/docker
Udah deh,
Voila, semua berjalan lancar kembali seperti sedia kala sebelum negara api menyerang.
Top comments (0)