Di buruh pelabuhan, file yang dibuat di dalam container cenderung memiliki kepemilikan yang tidak dapat diprediksi saat memeriksanya dari host. Pemilik file pada volume adalah root (uid 0) secara default, tetapi segera setelah akun pengguna non-root terlibat dalam penampung dan menulis ke sistem file, pemilik menjadi kurang lebih acak dari perspektif host.
Ini adalah masalah ketika Anda perlu mengakses data volume dari host menggunakan akun pengguna yang sama yang memanggil perintah buruh pelabuhan.
Solusi umumnya adalah
- memaksa uID pengguna pada waktu pembuatan di Dockerfiles (non portabel)
- meneruskan UID pengguna host ke
docker runperintah sebagai variabel lingkungan dan kemudian menjalankan beberapachownperintah pada volume dalam skrip entrypoint.
Kedua solusi ini dapat memberikan kontrol atas izin aktual di luar penampung.
Saya berharap ruang nama pengguna menjadi solusi terakhir untuk masalah ini. Saya telah menjalankan beberapa pengujian dengan versi 1.10 yang baru dirilis dan --userns-remap disetel ke akun desktop saya. Namun, saya tidak yakin itu dapat membuat kepemilikan file pada volume yang terpasang lebih mudah ditangani, saya khawatir itu sebenarnya bisa sebaliknya.
Misalkan saya memulai wadah dasar ini
docker run -ti -v /data debian:jessie /bin/bash
echo 'hello' > /data/test.txt
exit
Dan kemudian periksa konten dari host:
ls -lh /var/lib/docker/100000.100000/volumes/<some-id>/_data/
-rw-r--r-- 1 100000 100000 6 Feb 8 19:43 test.txt
Nomor '100000' ini adalah sub-UID pengguna host saya, tetapi karena tidak sesuai dengan UID pengguna saya, saya masih tidak dapat mengedit test.txt tanpa hak istimewa. Sub-pengguna ini tampaknya tidak memiliki ketertarikan dengan pengguna biasa saya yang sebenarnya di luar buruh pelabuhan. Ini tidak dipetakan kembali.
Solusi yang disebutkan sebelumnya dalam posting ini yang terdiri dari menyelaraskan UID antara host dan penampung tidak berfungsi lagi karena UID->sub-UIDpemetaan yang terjadi di namespace.
Lalu, apakah ada cara untuk menjalankan buruh pelabuhan dengan namespace pengguna diaktifkan (untuk keamanan yang lebih baik), sementara masih memungkinkan bagi pengguna host yang menjalankan buruh pelabuhan untuk memiliki file yang dihasilkan pada volume?