Docker'da, kapsayıcılar içinde oluşturulan dosyalar ana bilgisayardan incelenirken öngörülemeyen sahipliğe sahip olma eğilimindedir. Bir birimdeki dosyaların sahibi varsayılan olarak root'tur (uid 0), ancak root olmayan kullanıcı hesapları kapsayıcıya dahil olur olmaz ve dosya sistemine yazılırsa, sahipler ana bilgisayar perspektifinden az çok rastgele hale gelir.
Docker komutlarını çağıran aynı kullanıcı hesabını kullanarak ana bilgisayardan birim verilerine erişmeniz gerektiğinde bu bir sorundur.
Tipik geçici çözümler şunlardır:
- Dockerfiles'te oluşturma sırasında kullanıcıların uID'lerini zorlamak (taşınabilir olmayan)
- ana bilgisayar kullanıcısının UID'sini
docker run
bir ortam değişkeni olarak komuta geçirmek ve ardından bir giriş noktası komutchown
dizisindeki birimler üzerinde bazı komutları çalıştırmak .
Her iki çözüm de kapsayıcı dışındaki gerçek izinler üzerinde bir miktar kontrol sağlayabilir.
Kullanıcı ad alanlarının bu soruna nihai çözüm olmasını bekliyordum. Kısa süre önce yayınlanan sürüm 1.10 ve --userns-remap masaüstü hesabıma ayarlanmış olarak bazı testler çalıştırdım. Bununla birlikte, takılı birimlerde dosya sahipliğinin üstesinden gelmeyi kolaylaştıracağından emin değilim, korkarım bunun tam tersi olabilir.
Bu temel kapsayıcıyı başlattığımı varsayalım
docker run -ti -v /data debian:jessie /bin/bash
echo 'hello' > /data/test.txt
exit
Ve sonra ana bilgisayardaki içeriği inceleyin:
ls -lh /var/lib/docker/100000.100000/volumes/<some-id>/_data/
-rw-r--r-- 1 100000 100000 6 Feb 8 19:43 test.txt
Bu '100000' sayısı, ana bilgisayar kullanıcımın bir alt UID'sidir, ancak kullanıcımın UID'sine karşılık gelmediği için, yine de ayrıcalıklar olmadan test.txt'yi düzenleyemiyorum. Bu alt kullanıcının docker dışındaki gerçek normal kullanıcımla herhangi bir ilgisi yok gibi görünüyor. Geriye doğru haritalanmamış.
Bu yazıda daha önce bahsedilen ve ana bilgisayar ile konteyner arasında UID'lerin hizalanmasından oluşan geçici çözümler UID->sub-UID
, ad alanında gerçekleşen eşleştirme nedeniyle artık çalışmıyor .
Öyleyse, docker'ı kullanıcı ad alanı etkinken (gelişmiş güvenlik için) çalıştırmanın ve docker çalıştıran ana bilgisayar kullanıcısının ciltlerde oluşturulan dosyalara sahip olmasını sağlamanın bir yolu var mı?