Docker'ı sudo olmadan nasıl kullanabilirim?

Docker'ın dokümantasyon sayfalarında, tüm örnek komutlar olmadan gösterilir sudo bunun gibi:

docker ps

Ubuntu'da ikili olarak adlandırılır docker.io. Ayrıca sudo olmadan çalışmaz:

sudo docker.io ps

Docker'ı, her Docker komutunu sudo ile öneklemem gerekmeyecek şekilde nasıl yapılandırabilirim?

İyi haber: yeni docker (sürüm 19.03 (şu anda deneysel)), bir kök kullanıcı kullanılarak oluşabilecek sorunları köksüz olarak çalıştırabilecektir. Artık yükseltilmiş izinler, kök ve istemediğiniz zaman makinenizi açabilecek herhangi bir şeyle uğraşmak yok.

Bu konuda video [DockerCon 2019] Köksüz modda Docker daemonunu sertleştirme

Köksüz Docker moduna birkaç Uyarı

Docker mühendisleri, köksüz modun Docker engine özelliklerinin eksiksiz paketinin yerine geçemeyeceğini söylüyor. Köksüz mod için bazı sınırlamalar şunlardır:

  • cgroups kaynak denetimleri, apparmor güvenlik profilleri, denetim noktası / geri yükleme, kaplama ağları vb. köksüz modda çalışmayın.
  • Bağlantı noktalarını kapsayıcılardan açığa çıkarmak şu anda manuel socat yardımcı işlemi gerektirir.
  • Yalnızca Ubuntu tabanlı dağıtımlar, köksüz modda yer paylaşımı dosya sistemlerini destekler.
  • Köksüz mod şu anda yalnızca alıştığınız kadar kararlı olmayabilecek gece yapıları için sağlanmıştır.

Docker 19.3'ten itibaren bu modası geçmiş (ve gerekenden daha tehlikeli):

Bu docker kılavuzu bu konuda söyleyecek bir şey var mı:

Kök olmayan erişim sağlama

Docker daemon her zaman kök kullanıcı olarak çalışır ve Docker sürüm 0.5.2'den bu yana docker daemon TCP bağlantı noktası yerine bir Unıx soketine bağlanır. Varsayılan olarak, Unix soketi kullanıcı köküne aittir ve bu nedenle varsayılan olarak sudo ile erişebilirsiniz.

0.5.3 sürümünden başlayarak, siz (veya Docker yükleyiciniz) docker adında bir Unix grubu oluşturup buna kullanıcı eklerseniz, docker daemon başlatıldığında docker grubu tarafından Unix soketinin sahipliğini okunabilir / yazılabilir hale getirir. Docker daemonunun her zaman kök kullanıcı olarak çalışması gerekir, ancak docker istemcisini docker grubundaki bir kullanıcı olarak çalıştırırsanız, tüm istemci komutlarına sudo eklemeniz gerekmez. 0.9.0'dan itibaren docker dışındaki bir grubun -G seçeneğiyle Unıx soketine sahip olması gerektiğini belirtebilirsiniz.

Uyarı: Docker grubu (veya -G ile belirtilen grup) root eşdeğerdir; bkz. Docker Daemon Saldırı Yüzey detayları ve bu blog yazısı Kök olmayan kullanıcıların Docker'ı CentOS, Fedora veya Rhel'de çalıştırmasına neden izin vermiyoruz (teşekkürler michael-n).

Son sürümde GitHub'da deneysel köksüz mod mühendisler, köksüz modun, user_namespaces (7), mount_namespaces (7), network_namespaces (7) kullanarak dockerd'yi imtiyazsız bir kullanıcı olarak çalıştırmasına izin verdiğini belirtiyor.

Kullanıcıların çalıştırması gerekiyor dockerd-rootless.sh dockerd yerine.

$ dockerd-rootless.sh --experimental

Köksüz mod deneysel olduğundan, kullanıcıların her zaman çalışması gerekir dockerd-rootless.sh deneysel.


Okumak önemlidir: Linux için kurulum sonrası adımlar (aynı zamanda aşağıdakilere de bağlanır Docker Daemon Saldırı Yüzey detayları).

Docker'ı root olmayan bir kullanıcı olarak yönetme

Docker daemon, TCP bağlantı noktası yerine bir Unıx soketine bağlanır. Varsayılan olarak, Unix soketi kullanıcı köküne aittir ve diğer kullanıcılar yalnızca sudo kullanarak erişebilir. Docker daemon her zaman kök kullanıcı olarak çalışır.

Docker komutunu kullandığınızda sudo kullanmak istemiyorsanız, docker adlı bir Unıx grubu oluşturun ve buna kullanıcı ekleyin. Docker daemon başlatıldığında, Unıx soketinin sahipliğini docker grubu tarafından okunabilir / yazılabilir hale getirir.


  • Zaten mevcut değilse docker grubunu ekleyin:

     sudo groupadd docker
  • Bağlı kullanıcıyı "$USER" docker grubuna ekleyin. Geçerli kullanıcınızı kullanmak istemiyorsanız, kullanıcı adını tercih ettiğiniz kullanıcıyla eşleşecek şekilde değiştirin:

     sudo gpasswd -a $USER docker
  • Ya bir tane yap newgrp docker veya gruplardaki değişiklikleri etkinleştirmek için oturumu kapatın / oturum açın.

  • Kullanabilirsiniz

     docker run hello-world

    docker'ı sudo olmadan çalıştırıp çalıştıramayacağınızı kontrol etmek için.

Docker komutunu çalıştırmak için sudo, kullanıcınızı (kök ayrıcalıklarına sahip) docker grubuna eklemeniz gerekir. Bunu yapmak için aşağıdaki komutu çalıştırın:

 sudo usermod -aG docker $USER

Şimdi, kullanıcının oturumu kapatmasını ve ardından tekrar oturum açmasını sağlayın. Bu çözüm iyi açıklanmıştır burada doğru kurulum işlemi ile.

Gruba kullanıcı ekleme mekanizması docker docker'ı çalıştırmak için izin verir docker soketine erişmek için /var/run/docker.sock. İçeren dosya sistemi ise /var/run acl'ler etkinken monte edilmiştir, bu ACL'LER aracılığıyla da başarılabilir.

sudo setfacl -m user:$USER:rw /var/run/docker.sock

Bunu sadece tamlık için dahil ediyorum.

Genel olarak, gruplara dayalı iyi bir alternatif mevcut olduğunda acl'lerden kaçınmanızı tavsiye ederim: Bir sistemdeki ayrıcalıkların yalnızca grup üyeliklerine bakarak anlaşılabilmesi daha iyidir. Sistem ayrıcalıklarını anlamak için dosya sistemini ACL girişleri için taramak zorunda kalmak güvenlik denetimleri için ek bir yüktür.

Uyarı 1: Bu aynı root ekleme olarak denklik $USER to the docker grup. Yine de bir kapsayıcıyı şu şekilde başlatabilirsiniz: root ana bilgisayar dosya sistemine erişim.

Uyarı 2: Acl'ler güvenlik denetimleri için grup tabanlı güvenlikten önemli ölçüde daha zordur. Bunun yerine, en azından denetimle ilgili ortamlarda grupları kullanabiliyorsanız, mümkünse acl'lerden kaçının.

Docker grubunu oluşturduktan ve kullanıcımı ekledikten sonra

sudo groupadd dockersudo usermod -aG docker $USER

... Hala vermek zorundaydım. /var/run/docker.sock soket ve /var/run/docker çalışması için uygun izinleri dizinleyin:

sudo chown root:docker /var/run/docker.socksudo chown -R root:docker /var/run/docker

Oturumu kapatın ve tekrar oturum açın (bu kullanıcıyla), ardından docker komutlarını çalıştırmadan çalıştırabilirsiniz sudo:

docker run hello-world

Docker kapsayıcılarının bir kök kullanıcı tarafından çalıştırılması gerekir. Kendinizi ekleyebilirsiniz docker grup (örn. çalıştırarak sudo usermod -aG docker $USER), ancak bu, erişimi olan herkes için kolaylaştırır $USER makineye kök erişimi elde etmek için hesap (örn. ayrıcalıklı bir kapsayıcıya bir kök birimi monte ederek).

Docker kapsayıcılarını root olmayan bir kullanıcı olarak çalıştırmanın daha güvenlik bilincine sahip bir yolu Podman kullanmak olacaktır: https://podman.io/. Web sitesinden:

Podman, Linux Sisteminizde OCI Kapsayıcılarını geliştirmek, yönetmek ve çalıştırmak için daemonsuz bir kapsayıcı motorudur. Konteynerler root olarak veya root olarak çalıştırılabilir. köksüz modu. Basitçe söylemek gerekirse: alias docker=podman.

Diğer bir alternatif, HPC ortamlarında daha yaygın olarak kullanılan Tekilliktir: https://sylabs.io/.

Takma isme ne dersin:? Bu şekilde, hala şifre korumalı sudo kullanıyorsunuz. diğer ad docker="sudo docker "

Ufw’yi etkinleştirmeyi unutmayın;)

Ubuntu 14.04’te [var] (Ubuntu – Error ) ayrıca ‘docker’ ikili.

Önerilen kurulum, varsayılan ubuntu repolarında not docker ; bunun yerine, buradaki talimatlar ( Redirecting… / ), docker repo kullanmanızı öneririz. Mevcut tüm docker öğelerini kaldırın ve doğru kaynaktan aldığınızı doğrulayın: apt-cache policy docker-engine (apt url’si şu adresten olmalıdır dockerproject.org )

Root’un docker bilgisi gibi basit şeyler yapmasını gerektiren bu önemsiz şey nedir? ‘Docker bilgisi’ gibi, çalıştırmak için tüm dosyama, aygıtlarıma ve bağlantı noktalarına ham erişime ihtiyaç duyar.

@anatolytechtonik Ayrıca ‘docker’ yerine ‘docker’ kullandımdocker.io ’ Ubuntu 14.04 lts’de

Evet, Docker policykit veya benzeri bir şey uygulayana kadar bir takma ad kullanmanızı şiddetle tavsiye ederim, aksi takdirde her şeyi root olarak çalıştırabilirsiniz.

sudo chmod 666 /var / çalıştır / docker.vuruş