Rocky Linux ve AlmaLinux Docker Kurulum Rehberi
Rocky Linux ve AlmaLinux üzerinde Docker Engine kurulumunu dnf ile tamamlayın. Podman çakışmalarını çözün ve SELinux bind mount hatalarını gidermek için gereken adımları öğrenin.
Rocky Linux ve AlmaLinux üzerinde Docker kurulumu
Rocky Linux veya AlmaLinux üzerinde Docker kurmak için Docker'ın kendi dnf deposunu eklemeniz, motoru compose eklentisiyle birlikte yüklemeniz ve ardından servisi etkinleştirmeniz gerekir. Bu işlem dört komuttan oluşur ve her iki dağıtım da Red Hat Enterprise Linux (RHEL) tabanlı olup paket yapısını paylaştığı için kurulum adımları aynıdır. CentOS Stream üzerinde de süreç aynı şekilde işler.
Kurulum kısa sürdüğü için bu kılavuzun büyük bölümü, Enterprise Linux (EL) sistemlerinin Ubuntu'dan farklı olarak nasıl çalıştığını ele almaktadır. İmajınızda docker komutu halihazırda Podman tarafından kullanılıyor olabilir. SELinux, bind-mount edilen dosyaları doğru etiketlere sahip olana kadar engeller. Firewalld, Docker tarafından yayınlanan portları filtrelemez; bu nedenle bir container portu internete açık olabilirken firewall-cmd komutu hiçbir portun açık olmadığını raporlayabilir.
get.docker.com adresindeki Docker kolaylık betiğini (convenience script) kullanmayın. Docker'ın kendi dokümantasyonu, bu yöntemin üretim ortamları için önerilmediğini belirtmektedir. Söz konusu betik, depo yapılandırmanızı sormadan yeniden yazar ve yükseltme işlemleri için güvenli bir şekilde tekrar çalıştırılamaz. Depoyu manuel olarak eklemek, dnf upgrade aracının Docker'ı sistemdeki diğer tüm paketler gibi yönetmesini sağlar.
Podman halihazırda docker komutuna yanıt veriyor mu?
Rocky Linux ve AlmaLinux, varsayılan depolarında podman ile gelir ve birçok VPS imajı bunu sizin yerinize kurar. Bazı imajlar daha ileri giderek podman-docker paketini kurar; bu paket /usr/bin/docker yoluna podman'i çağıran bir kabuk betiği yerleştirir. Yazdığınız her docker komutu bunun sonucunda podman'i çalıştırır; bu nedenle Docker için yazılmış bir kılavuz beklediğinizden farklı çıktılar üretmeye başlar.
Bunun ilk belirtisi bir başlıktır. /usr/bin/docker betiği /etc/containers/nodocker dosyasını kontrol eder ve bu dosya eksik olduğunda, herhangi bir işlem yapmadan önce tek satırlık bir uyarı yazdırır:
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.Birisi bu başlığı susturmak için o dosyayı oluşturmuş olabilir, bu yüzden sadece buna güvenmeyin. Paket veritabanına ikili dosyanın hangi pakete ait olduğunu sorun:
command -v docker
rpm -qf "$(command -v docker)"podman-docker ile başlayan bir yanıt, podman'in yanıt verdiğini gösterir. docker-ce-cli ile başlayan bir yanıt ise gerçek Docker'ı işaret eder. Eğer rpm -qf dosyanın hiçbir pakete ait olmadığını bildiriyorsa, birisi onu manuel olarak kurmuştur; bu durumda betiğe güvenmeden önce içeriğini okumalısınız.
Podman aynı OCI imajlarını çalıştırır ve makul bir tercihtir. Eğer onu kullanmak istiyorsanız burada durun. Docker Engine istiyorsanız, önce çakışan paketleri kaldırın. Aşağıdaki liste, Docker'ın RHEL için belgelediği listedir:
sudo dnf remove docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runcOnay vermeden önce dnf'in neleri kaldıracağını inceleyin. Yeni bir VPS imajında liste kısadır. Birisi tarafından halihazırda kullanılmış bir sunucuda, podman paketini kaldırmak cockpit-podman veya ona bağımlı başka bir aracı sistemden silebilir.
Podman'i Docker ile birlikte tutmak prensipte mümkündür: yalnızca podman-docker paketini kaldırarak docker ismini boşa çıkarın ve containerd.io paketinin yerini aldığı runc paketini kaldırın. Docker belgeleri podman'i çakışan bir paket olarak ele alır, bu nedenle bu yapılandırma Docker tarafından desteklenmez. Kurulum hala bir çakışma bildiriyorsa, yukarıdaki tam kaldırma listesini kullanın.
dnf config-manager ile Docker deposunu ekleme
Docker, Enterprise Linux için RPM paketlerini download.docker.com adresinde yayınlar. Depo dosyası, Rocky Linux ve AlmaLinux'un çözümleme yaptığı CentOS ağacını işaret eder. Ağustos 2026 itibarıyla Docker, bu depoyu CentOS Stream 9 ve CentOS Stream 10 için belgelemektedir.
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repodnf sürüm 5 ile birlikte --add-repo argümanı kaldırılmıştır, bu nedenle ikinci komut daha yeni sürümlerde başarısız olur. Hangi sürüme sahip olduğunuzu kontrol edin ve ardından eşleşen biçimi seçin:
dnf --versionEğer çıktı 5.x sürümünü gösteriyorsa, bunun yerine alt komut biçimini kullanın:
sudo dnf config-manager addrepo --from-repofile=https://download.docker.com/linux/centos/docker-ce.repoHer iki komut da aynı dosyayı /etc/yum.repos.d/docker-ce.repo konumuna yazar. Yanlış biçim kullanıldığında sessiz bir hata oluşmaz, bunun yerine bilinmeyen argüman hatası verir; bu yüzden durumu fark etmemeniz mümkün değildir.
Söz konusu depo dosyası, baseurl değerini $releasever içeren bir yola ayarlar ve dnf bu değişkeni sürüm paketinizden genişletir. Rocky Linux ve AlmaLinux bunu ana sürüm numarasına ayarlar; yani EL 9 üzerinde 9 ve EL 10 üzerinde 10 değerini alır. CentOS deposunun bir Rocky sunucusunda doğru şekilde çözümlenmesinin nedeni budur. Kurulumdan önce genişletmeyi doğrulayın:
sudo dnf repoinfo docker-ce-stableRepo-baseurl satırını okuyun. Bu satır /9/x86_64/stable veya /10/x86_64/stable ile bitmelidir. Eğer sürüm paketiniz $releasever değerini 9.6 gibi bir ara sürüm numarasına ayarlıyorsa, dnf meta verileri çekerken bu URL için Status code: 404 hatası bildirir. Sorunu gidermek için /etc/yum.repos.d/docker-ce.repo dosyasını düzenleyin ve $releasever ifadesini doğrudan ana sürüm numarasıyla değiştirin.
Motoru ve compose eklentisini kurun
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginBeş paket vardır ve her biri tek bir iş yapar. docker-ce arka plan sürecidir (daemon), dockerd. docker-ce-cli, yazdığınız docker komutudur. containerd.io, arka plan sürecinin yönettiği container çalışma zamanıdır. docker-buildx-plugin imajları oluşturur. docker-compose-plugin, docker compose özelliğini bir alt komut olarak sağlar.
Bu paketler tire işareti içeren bir docker-compose ikili dosyası kurmaz. Bu, Temmuz 2023'te kullanım ömrü sona eren Compose v1 sürümüydü. docker-compose komutunu tire ile çağıran her şeyin, boşluk içeren docker compose komutuyla güncellenmesi gerekir.
İlk kurulum, Docker'ın imzalama anahtarını içe aktarmak için durur ve size parmak izini gösterir. Anahtar, yeni eklediğiniz depo dosyasındaki gpgkey=https://download.docker.com/linux/centos/gpg adresinden gelir; bu nedenle kabul etmeden önce dnf tarafından yazdırılan parmak izini bu URL ile karşılaştırın.
Bir hata, adlandırılacak kadar sık görülür. Eğer dnf, containerd.io paketinin container-selinux paketine ihtiyaç duyduğunu ve bunu sağlayan bir paket olmadığını bildirirse, AppStream deponuz devre dışı bırakılmıştır. dnf repolist komutunu çalıştırın ve appstream öğesinin listelendiğini doğrulayın; çünkü container-selinux, EL 9 ve EL 10 üzerinde bu depodan dağıtılır.
Docker'ı başlatın ve çalıştığını doğrulayın
sudo systemctl enable --now docker
sudo systemctl status docker --no-pager
sudo docker run --rm hello-worldDocker'ın RPM paketleri, kurulum sonrasında daemon'ı durdurulmuş ve devre dışı bırakılmış halde bırakır. Bu adımın Docker'ın Ubuntu sayfasında değil de CentOS sayfasında yer almasının nedeni budur; Ubuntu'da deb paketi servisi sizin yerinize başlatır. enable komutunu atlarsanız Docker bir sonraki yeniden başlatmaya kadar çalışır, ardından kapanır ve tüm container'ları beraberinde devre dışı bırakır.
systemctl status komutu Active: active (running) çıktısını vermelidir. hello-world container'ı This message shows that your installation appears to be working correctly. çıktısını verip sonlanmalıdır. Eğer bunun yerine /var/run/docker.sock üzerinde bir izin hatası veriyorsa, sudo adımını atlamışsınız demektir; bu durum aşağıdaki docker grubu bölümü ile düzeltilir.
Compose eklentisini ayrıca kontrol edin; bu farklı bir paket olduğundan engine düzgün çalışsa bile eksik olabilir:
docker compose versionSağlıklı bir yanıt Docker Compose version v2.x.x gibi görünmelidir. Servislerinizi yeniden başlatma sonrasında geri getirmek, daemon'ı etkinleştirmekten ayrı bir konudur ve restart politikaları, Compose servislerinin açılışta geri gelip gelmeyeceğine karar verir.
Bind mount neden permission denied hatası verir?
Rocky Linux ve AlmaLinux, SELinux (Security-Enhanced Linux) sistemini varsayılan olarak enforcing modunda çalıştırır. Bunu getenforce komutuyla doğrulayabilirsiniz; komut Enforcing çıktısını verecektir.
Docker container'ları container_t SELinux türü altında çalışır ve bu tür yalnızca container_file_t etiketine sahip dosyaları okuyup yazabilir. Host üzerinde oluşturduğunuz bir dizin, üst dizininin etiketini alır ve bu etiket container_file_t değildir. Host tarafında dosya sahibi, grup ve izinler doğru görünse bile container'ın erişimi reddedilir. Bu durumu üç komutla yeniden oluşturabilirsiniz:
sudo mkdir -p /srv/site
echo hello | sudo tee /srv/site/index.html
sudo docker run --rm -v /srv/site:/usr/share/nginx/html:ro nginx:alpine cat /usr/share/nginx/html/index.htmlContainer şu çıktıyı verir:
cat: can't open '/usr/share/nginx/html/index.html': Permission deniedİki komut sorunun nedenini gösterir. ls -ldZ /srv/site komutu etiketi yazdırır; /srv altındaki bir yol için bu etiket system_u:object_r:var_t:s0'tür, container_file_t değildir. Ardından sudo ausearch -m avc -ts recent komutu, çekirdeğin denetim kaydını yazdırır. Bu kayıt, avc: denied { read } değerini, container_t değerini belirten bir scontext= alanını ve dizin üzerinde az önce gördüğünüz etiketi belirten bir tcontext= alanını içerir. Bu iki alan arasındaki uyumsuzluk sorunun tamamıdır.
Çözüm, volume argümanına bir sonek eklemektir. Docker, yolu sizin için yeniden etiketler:
sudo docker run --rm -v /srv/site:/usr/share/nginx/html:ro,z nginx:alpine cat /usr/share/nginx/html/index.htmlKüçük harfli :z, içeriği paylaşılan olarak yeniden etiketler; böylece birden fazla container aynı dizini kullanabilir. Büyük harfli :Z ise içeriği özel ve paylaşılmayan olarak yeniden etiketler; bu durumda dizin tek bir container'a bağlanır ve aynı yolu okumaya çalışan ikinci bir container reddedilir. Sidecar veya yedekleme container'larının da eriştiği dizinler için :z kullanın. Tek bir container'ın sahip olduğu veritabanı dizinleri için :Z kullanın.
Docker dokümantasyonu, tekrarlanması gereken bir uyarı içerir çünkü yeniden etiketleme işlemi özyinelemelidir (recursive). /home veya /usr gibi bir sistem dizinini :Z ile bind-mount etmek, "host makinenizi kullanılamaz hale getirir ve host makine dosyalarını elle yeniden etiketlemeniz gerekebilir". Bu sonekleri yalnızca container için oluşturduğunuz dizinlere uygulayın, asla sistem yollarına uygulamayın.
Compose dosyasında sonek aynı dizgeye eklenir:
services:
web:
image: nginx:alpine
volumes:
- /srv/site:/usr/share/nginx/html:ro,zİki sınıra dikkat etmek gerekir. --mount bayrağı SELinux etiketi atayamaz, bu nedenle etiket gerektiğinde -v kullanın. Adlandırılmış volume'lar (named volumes) soneke ihtiyaç duymaz, çünkü Docker /var/lib/docker/volumes altında oluşturduğu dizinleri kendisi etiketler.
SELinux'u kapatmayın. sudo setenforce 0 komutunu yalnızca bir dakikalık test için kullanın: eğer container çalışırsa sorun etiketle ilgilidir ve çözüm :z'dir. Testten sonra sudo setenforce 1 ile sistemi hemen eski haline getirin. Enterprise Linux üzerinde, bind mount kaynaklı permission denied hatasının container içinden aynı görünen iki ayrı nedeni vardır. Biri SELinux etiketidir. Diğeri ise standart sayısal kullanıcı ve grup sahipliğidir; bu sorun PUID ve PGID değişkenlerinin çözdüğü sorundur. ls -lnZ komutu izinleri, sayısal sahipliği ve etiketi tek satırda gösterir; böylece hangi sorunla uğraştığınızı anlayabilirsiniz.
Firewalld kapalı görünürken yayınlanan bir port neden erişilebilir durumdadır?
Firewalld, Rocky Linux ve AlmaLinux üzerinde varsayılan güvenlik duvarıdır. sudo systemctl is-active firewalld ile çalıştığını doğrulayın. Şimdi bir portu yayınlayın ve firewalld'un neyi açık gördüğünü inceleyin:
sudo docker run -d --name web -p 8080:80 nginx:alpine
sudo firewall-cmd --list-portsfirewall-cmd boş bir satır döndürür. Başka bir makineden curl -I http://YOUR_SERVER_IP:8080/ komutu HTTP/1.1 200 OK sonucunu verir. Port internete açıktır ancak güvenlik duvarınız hiçbir şey rapor etmez.
Bunun nedeni paketin izlediği yoldur. Firewalld bölge kuralları, doğrudan ana makineye yönlendirilen trafiği filtreler. Yayınlanan bir port ana makineye hitap etmez: Docker, paket ana makinenin giriş yoluna ulaşmadan önce hedefi container adresine yeniden yazan bir hedef NAT (ağ adresi çevirisi) kuralı yükler; bu nedenle çekirdek, paketi yerel olarak teslim etmek yerine iletir. Docker daha sonra köprü arayüzlerini hedefi ACCEPT olan docker adlı bir firewalld bölgesine yerleştirir ve herhangi bir bölgeden docker bölgesine iletime izin veren docker-forwarding adlı bir iletim politikası ekler. Bölge kurallarınız paketi hiçbir zaman görmez.
En temiz çözüm hiçbir güvenlik duvarı kuralı gerektirmez. Yayınlamanın ana makine tarafını loopback adresine bağlayın ve önüne bir reverse proxy koyun:
sudo docker rm -f web
sudo docker run -d --name web -p 127.0.0.1:8080:80 nginx:alpine
curl -I http://127.0.0.1:8080/Yerel curl komutu HTTP/1.1 200 OK döndürür ve başka bir makineden gelen aynı istek artık bağlanamaz. -p argümanında ana makine adresi bulunmayan her şey tüm arayüzlerde yayınlanır; bu nedenle çıplak bir -p 8080:80 ifadesini, o servisi herkese açık hale getirme kararı olarak değerlendirin.
Bir servisin bazı adreslerden erişilebilir, diğerlerinden erişilemez olması gerektiğinde Docker sizin için bir zincir ayırır. DOCKER-USER, Docker'ın kendi kabul kurallarından önce işlenir; bu nedenle buraya eklediğiniz bir kural, Docker yeniden başlatılıp zincirlerini yeniden yazdığında bile varlığını korur:
sudo iptables -I DOCKER-USER -i enp1s0 ! -s 203.0.113.10 -j DROP
sudo iptables -S DOCKER-USEReth0 varsayımı yerine arayüz adını ip route show default üzerinden alın, çünkü güncel EL imajları enp1s0 veya ens3 gibi isimler kullanır. Rocky ve AlmaLinux üzerinde iptables komutu nftables üzerinde bir uyumluluk katmanıdır ve Docker'ın zincirleri bu komut aracılığıyla görülebilir. Bu şekilde eklenen kurallar, kaydetmediğiniz sürece yeniden başlatma sonrasında silinir; bu nedenle kurallardan memnun kaldığınızda bunları bir systemd birimine yazın.
2025 yılında yayınlanan Docker Engine 28.0, benzer bir açığı kapattı: daha önce hiç yayınlanmamış container portlarına doğrudan yönlendirmeli erişim artık DOCKER zincirinde engellenmektedir. Bu değişiklik yayınlanan portları etkilemez, bu nedenle yukarıdaki her şey güncel sürümlerde geçerliliğini korur. Bir operasyonel alışkanlık edinmekte fayda vardır: herhangi bir sudo firewall-cmd --reload işleminden sonra yayınlanan bir portu tekrar test edin. Eğer yanıt vermeyi durdurduysa, sudo systemctl restart docker komutu Docker'ın kurallarını yeniden yükler.
Ubuntu yöneticileri aynı engelle farklı bir araç üzerinden karşılaşır, bunun detayları yayınlanan Docker portları neden ufw kurallarını görmezden gelir başlığında yer almaktadır. Her iki durumda da neden NAT yoludur. Sadece kullanılan güvenlik duvarı değişir.
docker grubuna root olmayan bir kullanıcı ekleme
Her docker komutundan önce sudo yazmak zamanla zahmetli hale gelir; docker grubu bu ihtiyacı ortadan kaldırır:
sudo usermod -aG docker $USER
newgrp docker
docker run --rm hello-worldusermod -aG komutu /etc/group dosyasını düzenler, ancak mevcut kabuğunuz halihazırda kendi grup listesine sahip olduğundan, değişiklik yeni bir oturum açana kadar geçerli olmaz. newgrp docker komutu, grubu dahil edilmiş bir kabuk başlatarak değişikliği hemen test etmenizi sağlar. Yeni SSH oturumları bu değişikliği otomatik olarak algılar.
Bu grubun ne tür yetkiler verdiğini net bir şekilde anlamak gerekir. Üyelik, /var/run/docker.sock dosyasına yazma erişimi sağlar; bu soketle iletişim kurabilen herhangi bir yapı, daemon'a ana makine dosya sistemini bağlayan bir container başlatma talimatı verebilir. Aşağıdaki tek bir komut bunun ne anlama geldiğini gösterir:
docker run --rm -v /:/host alpine wc -l /host/etc/shadowBu komut, sudo yetkisi olmayan bir hesaptan, yalnızca root kullanıcısının okuyabildiği bir dosyayı okur. Docker'ın kendi kurulum sonrası belgeleri de aynı noktaya dikkat çeker: docker grubu, root ile eşdeğer ayrıcalıklar sağlar. Bir hesabı bu gruba yalnızca o hesaba sudo yetkisi vermeyi göze alıyorsanız ekleyin. Yeni bir sunucuda hesap kurulumu yapıyorsanız, bu kararı sonradan değil, VPS üzerinde en az ayrıcalıklı kullanıcı kurulumu sürecinin bir parçası olarak değerlendirin.
Docker ayrıca daemon'ı ayrıcalıksız bir kullanıcı olarak çalıştıran rootless modunu da sunar. Bu, ayrı bir kurulum yoludur ve depolama sürücüleri ile 1024 altındaki portların davranışını değiştirir; bu nedenle bunu sonradan eklenecek bir bayrak olarak değil, başlı başına bir proje olarak planlayın.
Bundan sonra ne yapılmalı
Artık elinizde motor, compose eklentisi, yeniden başlatma sonrasında çalışmaya devam eden bir servis ve yukarıda belgelenen üç EL'ye özgü davranış bulunuyor. Bir sonraki adım, servis başına bir compose.yaml oluşturmaktır; Compose dosyasının yapısı bölümü, dosya biçimini ve bu dosyayı yöneten komutları ele almaktadır. Eğer bu sizin ilk container sunucunuz ise, VPS üzerinde Docker çalıştırma rehberi, bu kılavuzun dışında kalan boyutlandırma, depolama ve imaj hijyeni konularını kapsamaktadır.
FAQ
Docker'ın CentOS deposu Rocky Linux ve AlmaLinux üzerinde çalışır mı?
Evet. https://download.docker.com/linux/centos/docker-ce.repo dosyasını dnf config-manager ile ekleyin. Bu dosyadaki baseurl, $releasever içerir; Rocky Linux ve AlmaLinux bunu ana sürüm numarasına genişletir. Bu sayede EL 9 bir sistem CentOS 9 ağacına, EL 10 bir sistem ise CentOS 10 ağacına yönlenir. Genişletmeyi sudo dnf repoinfo docker-ce-stable ile doğrulayın ve Repo-baseurl satırını okuyun. dnf meta verileri çekerken Status code: 404 hatası alıyorsanız, değişken bir ara sürüme genişlemiş demektir; /etc/yum.repos.d/docker-ce.repo dosyasını düzenleyip sadece ana sürüm numarasını kullanarak bu sorunu çözebilirsiniz.
Docker ve podman aynı sunucuya kurulabilir mi?
Docker belgeleri podman ve runc paketlerini çakışan paketler olarak listeler ve Docker Engine kurulumundan önce her ikisinin de kaldırılmasını önerir. Somut çakışma, /usr/bin/docker yoluna sahip olan ve her docker komutunu bir podman komutuna dönüştüren podman-docker paketinden kaynaklanır. Hangi paketin bu yola sahip olduğunu görmek için rpm -qf "$(command -v docker)" komutunu çalıştırın. Çıktı podman-docker ile başlıyorsa, podman yanıt veriyor demektir. Her iki motoru bir arada tutmak Docker tarafından desteklenen bir yapı değildir; bu nedenle kritik bir sunucuda bunlardan birini seçin.
Bind mount üzerinde container neden permission denied hatası alıyor?
Rocky Linux ve AlmaLinux üzerinde SELinux varsayılan olarak etkindir. Container'lar container_t türüyle çalışır ve yalnızca container_file_t etiketli dosyalara erişebilir. Oluşturduğunuz dizin yanlış etikete sahipse, dosya sahibi veya izinleri ne olursa olsun erişim reddedilir. Bunu host üzerindeki yolda ls -ldZ komutuyla ve iki uyumsuz bağlamı gösteren avc: denied çıktısını veren sudo ausearch -m avc -ts recent ile doğrulayın. Container'lar arasında paylaşılan içerik için volume argümanına :z, tek bir container'a özel içerik için ise :Z ekleyin. :Z yolunu asla /home veya /usr dizinlerine yönlendirmeyin; çünkü etiketleme işlemi özyinelemelidir ve host sistemini bozacaktır.
Bir container portunu dışarı açmak için firewalld üzerinde port açmam gerekir mi?
Hayır, sorun da tam olarak budur. Docker'ın NAT kuralı, paket host'un giriş yoluna ulaşmadan önce hedef adresi yeniden yazar, bu nedenle firewalld bölge kuralları paketi asla denetlemez. Docker ayrıca köprülerini ACCEPT hedefiyle docker adlı bir firewalld bölgesine yerleştirir. -p 8080:80 ile başlatılan bir container internetten erişilebilir durumdayken sudo firewall-cmd --list-ports hiçbir çıktı vermez. Servise yalnızca host üzerinden erişilmesi gerekiyorsa -p 127.0.0.1:8080:80 ile belirli bir adrese yayın yapın veya Docker'ın kendi kabul kurallarından önce işlediği DOCKER-USER zincirine filtreleme kuralları ekleyin.
Kullanıcımı docker grubuna eklemek güvenli mi?
Bu işlem root yetkisi verir. docker grubunun bir üyesi /var/run/docker.sock dosyasına yazabilir ve docker run --rm -v /:/host alpine wc -l /host/etc/shadow, sudo yetkisi olmayan bir hesaptan root'a özel bir dosyayı okuyabilir. Docker'ın kurulum sonrası belgeleri de aynı eşdeğerliği belirtir. Yalnızca sudo yetkisi vermeyi düşündüğünüz hesapları ekleyin; paylaşımlı veya servis hesapları için sudo docker kullanmaya devam edin. Ayrıcalıksız bir kullanıcı altında container çalıştırmanız gerektiğinde alternatif, bir ayar değişikliğinden ziyade ayrı bir kurulum yolu olan rootless modudur.