Bagaimana Saya bisa menggunakan docker tanpa sudo?

Pada halaman dokumentasi Docker, semua perintah contoh ditampilkan tanpa sudo, seperti ini:

docker ps

Di Ubuntu, biner disebut docker.io. Ini juga tidak berfungsi tanpa sudo:

sudo docker.io ps

Bagaimana Saya bisa mengkonfigurasi Docker sehingga saya tidak perlu awalan setiap perintah Docker dengan sudo?

Kabar baik: docker baru (versi 19.03 (saat ini eksperimental)) akan dapat menjalankan tanpa akar meniadakan masalah yang dapat terjadi menggunakan pengguna root. Tidak ada lagi bermain-main dengan izin tinggi, akar dan apa pun yang mungkin membuka mesin Anda ketika Anda tidak ingin.

Video tentang ini dari [DockerCon 2019] pengerasan daemon Docker dengan mode tanpa akar

Beberapa peringatan ke mode buruh pelabuhan tanpa akar

Insinyur Docker mengatakan mode tanpa akar tidak dapat dianggap sebagai pengganti rangkaian lengkap fitur mesin Docker. Beberapa batasan untuk mode tanpa akar meliputi:

  • kontrol sumber daya cgroups, profil keamanan apparmor, pos pemeriksaan/pemulihan, jaringan overlay, dll. jangan bekerja pada mode tanpa akar.
  • Mengekspos port dari kontainer saat ini membutuhkan proses pembantu socat manual.
  • Hanya distro berbasis Ubuntu yang mendukung sistem file overlay dalam mode tanpa akar.
  • Mode tanpa akar saat ini hanya disediakan untuk Build malam yang mungkin tidak stabil seperti biasanya.

Pada docker 19.3 ini sudah usang (dan lebih berbahaya dari yang dibutuhkan):

The docker manual apakah ini mengatakan tentang hal itu:

Memberikan akses non-root

Daemon docker selalu berjalan sebagai pengguna root, dan sejak Docker versi 0.5.2, daemon docker mengikat ke soket Unix alih-alih port TCP. Secara default bahwa soket Unix dimiliki oleh root pengguna, dan, secara default, Anda dapat mengaksesnya dengan sudo.

Mulai dari versi 0.5.3, jika Anda (atau penginstal Docker Anda) membuat grup Unix yang disebut docker dan menambahkan pengguna ke dalamnya, maka daemon docker akan membuat kepemilikan soket Unix dibaca/ditulis oleh grup docker ketika daemon dimulai. Daemon docker harus selalu dijalankan sebagai pengguna root, tetapi jika Anda menjalankan klien docker sebagai pengguna di grup docker maka Anda tidak perlu menambahkan sudo ke semua perintah klien. Pada 0.9.0, Anda dapat menentukan bahwa grup selain docker harus memiliki soket Unix dengan opsi-G.

Peringatan: grup buruh pelabuhan (atau grup yang ditentukan dengan-G) setara dengan root; lihat Detail permukaan serangan daemon Docker dan blogpost ini di Mengapa kami tidak membiarkan pengguna non-root menjalankan Docker di CentOS, Fedora, atau RHEL (terima kasih michael-n).

Dalam rilis terbaru dari mode tanpa akar eksperimental di GitHub, insinyur menyebutkan mode tanpa akar memungkinkan menjalankan dockerd sebagai pengguna yang tidak memiliki hak istimewa, menggunakan user_namespaces(7), mount_namespaces(7), network_namespaces(7).

Pengguna harus menjalankan dockerd-rootless.sh alih-alih dockerd.

$ dockerd-rootless.sh --experimental

Karena Mode Tanpa Akar bersifat eksperimental, pengguna harus selalu menjalankan dockerd-rootless.sh dengan-eksperimental.


Penting untuk dibaca: langkah pasca instalasi untuk Linux (ini juga link ke Detail permukaan serangan daemon Docker).

Mengelola Docker sebagai pengguna non-root

Daemon docker mengikat ke soket Unix alih-alih port TCP. Secara default soket Unix dimiliki oleh root pengguna dan pengguna lain hanya dapat mengaksesnya menggunakan sudo. Daemon docker selalu berjalan sebagai pengguna root.

Jika Anda tidak ingin menggunakan sudo saat menggunakan perintah docker, Buat Grup Unix bernama docker dan tambahkan pengguna ke dalamnya. Ketika daemon docker dimulai, itu membuat kepemilikan soket Unix dibaca / ditulis oleh grup docker.


  • Tambahkan grup docker jika belum ada:

     sudo groupadd docker
  • Tambahkan pengguna terhubung"$USER & quot; ke grup docker. Mengubah nama pengguna untuk mencocokkan pengguna pilihan Anda jika Anda tidak ingin menggunakan pengguna Anda saat ini:

     sudo gpasswd -a $USER docker
  • Baik melakukan newgrp docker atau log out / in untuk mengaktifkan perubahan ke grup.

  • Anda dapat menggunakan

     docker run hello-world

    untuk memeriksa apakah Anda dapat menjalankan docker tanpa sudo.

Untuk menjalankan perintah docker tanpa sudo, Anda perlu menambahkan pengguna Anda (yang memiliki hak akses root) ke grup docker. Untuk ini jalankan perintah berikut:

 sudo usermod -aG docker $USER

Sekarang, memiliki pengguna logout kemudian login lagi. Solusi ini dijelaskan dengan baik di sini dengan proses instalasi yang tepat.

Mekanisme yang menambahkan pengguna ke grup docker memberikan izin untuk menjalankan docker adalah untuk mendapatkan akses ke soket docker di /var/run/docker.sock. Jika filesystem yang berisi /var/run telah dipasang dengan ACLS diaktifkan, ini juga dapat dicapai melalui ACLs.

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

Saya hanya memasukkan ini untuk kelengkapan.

Secara umum, saya sarankan untuk menghindari acl setiap kali alternatif yang baik berdasarkan grup tersedia: lebih baik jika hak istimewa dalam suatu sistem dapat dipahami dengan melihat keanggotaan grup saja. Harus memindai sistem file untuk entri ACL untuk memahami hak istimewa sistem merupakan beban tambahan untuk audit keamanan.

Peringatan 1: Ini memiliki hal yang sama root kesetaraan sebagai menambahkan $USER untuk docker kelompok. Anda masih dapat memulai wadah dengan cara yang memiliki root akses ke sistem file host.

Peringatan 2: Acl secara signifikan lebih sulit untuk audit keamanan daripada keamanan berbasis grup. Mungkin hindari acl jika memungkinkan ketika Anda dapat menggunakan grup sebagai gantinya, setidaknya di lingkungan yang relevan dengan audit.

Setelah membuat grup buruh pelabuhan dan menambahkan pengguna saya ke dalamnya dengan

sudo groupadd dockersudo usermod -aG docker $USER

... Saya masih harus memberikan /var/run/docker.sock socket dan /var/run/docker direktori izin yang tepat untuk membuatnya bekerja:

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

Logout dan login lagi (dengan pengguna itu) maka Anda akan dapat menjalankan perintah docker tanpa sudo:

docker run hello-world

Kontainer Docker perlu dijalankan oleh pengguna root. Anda dapat menambahkan diri anda ke docker kelompok (misalnya dengan menjalankan sudo usermod -aG docker $USER), tetapi ini memudahkan siapa saja yang memiliki akses ke $USER akun untuk mendapatkan akses root ke mesin (misalnya dengan memasang volume root dalam wadah istimewa).

Cara yang lebih sadar keamanan untuk menjalankan kontainer Docker sebagai pengguna non-root adalah dengan menggunakan Podman: https://podman.io/. Dari situs webnya:

Podman adalah mesin kontainer daemonless untuk mengembangkan, mengelola, dan menjalankan kontainer OCI pada sistem Linux Anda. Kontainer dapat dijalankan sebagai root atau di mode tanpa akar. Sederhananya: alias docker=podman.

Alternatif lain adalah singularitas, yang lebih umum digunakan di lingkungan HPC: https://sylabs.io/.

Bagaimana dengan alias:? Dengan begitu, Anda masih menggunakan sudo, dengan proteksi password. alias docker = “sudo docker”

Jangan lupa untuk mengaktifkan ufw :wink:

Pada Ubuntu 14.04 ada juga biner ‘docker’.

Instalasi yang disarankan adalah not docker di repo ubuntu default; sebagai gantinya, instruksi di sini ( Redirecting…), sarankan menggunakan repo docker. Hapus semua hal docker yang ada, dan verifikasi Anda mendapatkan yang dari sumber yang tepat ' apt-cache policy docker-engine ' Url apt harus dari dockerproject.org)

Sampah Apa ini karena membutuhkan root untuk melakukan hal-hal sederhana seperti info buruh pelabuhan. Seperti ‘info buruh pelabuhan’ membutuhkan akses mentah ke semua file dan perangkat serta port saya untuk dijalankan.

@ anatolytechtonik saya juga menggunakan ‘docker’ alih-alih ‘docker.io’ di Ubuntu 14.04 LTS

Ya, sampai Docker mengimplementasikan policykit atau yang serupa, saya sangat menyarankan untuk menggunakan alias, jika tidak, Anda sebaiknya menjalankan semuanya sebagai root.

sudo chmod 666 / var / menjalankan / buruh pelabuhan.kaus kaki