Setup Docker tanpa Sudo
Masalah
Secara default, daemon Docker hanya bisa diakses oleh user
root dan anggota grup docker. Jika
kamu menjalankan perintah docker sebagai user biasa
tanpa sudo, akan muncul error seperti ini:
docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied.
Akibatnya, setiap perintah Docker harus diawali sudo,
yang merepotkan dan bisa menyebabkan masalah kepemilikan file (file
hasil bind mount jadi milik root).
Solusi: Tambahkan User ke Grup docker
Langkah 1 - Buat Grup docker (jika belum ada)
sudo groupadd docker
Perintah di atas hanya diperlukan jika grup
dockerbelum pernah dibuat. Biasanya grup ini sudah otomatis terbuat saat instalasi Docker.
Langkah 2 - Tambahkan User ke Grup docker
sudo usermod -aG docker $USER
Penjelasan parameter:
| Parameter | Fungsi |
|---|---|
-a |
Append - menambahkan user ke grup tanpa menghapus dari grup lain |
-G |
Specify supplementary groups |
docker |
Nama grup target |
$USER |
Username saat ini (bisa diganti dengan username spesifik) |
Langkah 3 - Refresh Sesi (Logout/Relogin)
Agar perubahan grup aktif, kamu perlu memulai sesi baru. Beberapa cara:
Opsi A - Logout dan login ulang (paling aman)
exit
# lalu login lagi
Opsi B - Gunakan newgrp (tanpa logout,
langsung di terminal)
newgrp docker
Opsi C - Aktifkan grup dengan sg
sg docker -c "docker ps"
Opsi D - Restart service di sesi yang sama (tidak selalu work)
exec su -l $USER
tipCara paling reliable adalah logout penuh dari desktop/SSH session, lalu login kembali.
newgrphanya berlaku untuk satu terminal.
Langkah 4 - Verifikasi
docker ps
Jika berhasil, kamu akan melihat daftar container yang sedang
berjalan tanpa perlu sudo.
docker run hello-world
Untuk memastikan kamu bisa menjalankan container tanpa error permission.
Verifikasi Lebih Lanjut
Coba beberapa perintah ini untuk memastikan setup berfungsi penuh:
# Melihat daftar image
docker images
# Menjalankan container interaktif
docker run -it --rm alpine sh
# Mengecek info Docker daemon
docker info | grep -i "username\|user"
Catatan Keamanan Penting
Menambahkan user ke grup docker secara efektif
memberikan akses root tanpa password.
Anggota grup docker bisa:
- Menjalankan container dengan akses penuh ke host filesystem
- Membaca/menulis semua file di host (dengan bind mount)
- Mengubah konfigurasi sistem melalui container
Ini setara dengan memberikan akses sudo tanpa
autentikasi. Jangan menambahkan user ke
grup docker di server production yang digunakan
banyak orang kecuali kamu benar-benar percaya.
Cek Siapa Saja di Grup docker
getent group docker
Output akan menunjukkan semua anggota grup docker.
Alternatif Lain
1. Menggunakan sudo dengan Persistence
Jika masalahnya cuma ingin mengurangi repotnya ngetik
sudo, buat alias di ~/.bashrc:
alias docker='sudo docker'
Lalu set sudo tanpa password untuk docker:
echo "$USER ALL=(ALL) NOPASSWD: /usr/bin/docker" | sudo tee /etc/sudoers.d/docker
Ini lebih aman daripada grup docker karena hanya memberi
akses ke binary docker, bukan akses penuh ke Docker
socket.
2. Rootless Docker (Paling Aman)
Mode rootless menjalankan daemon Docker tanpa hak root sama sekali:
# Install rootless Docker
dockerd-rootless-setuptool.sh install
# Jalankan tanpa root
docker context use rootless
docker run hello-world
Persyaratan:
newuidmapdannewgidmapharus terinstall- User mapping harus dikonfigurasi di
/etc/subuiddan/etc/subgid - Beberapa fitur tidak didukung (port < 1024, overlay2 di beberapa filesystem)
3. Menggunakan Podman (Alternatif Docker)
Podman dirancang tanpa daemon dan bisa dijalankan tanpa root secara default:
sudo apt install podman
podman run hello-world
Troubleshooting
| Masalah | Solusi |
|---|---|
docker ps masih error permission setelah
relogin |
Cek dengan id apakah user sudah di grup
docker. Jika belum, jalankan
sudo usermod -aG docker $USER lagi |
newgrp tidak ditemukan |
Package util-linux mungkin belum
terinstall, install dengan
sudo apt install util-linux |
| Docker socket tidak ada | Pastikan Docker sudah berjalan:
sudo systemctl status docker |
Error cannot connect to the Docker daemon
|
Restart daemon:
sudo systemctl restart docker |
Kesimpulan
Menambahkan user ke grup docker adalah cara termudah dan
tercepat untuk menjalankan Docker tanpa sudo. Tapi
ingat implikasi keamanannya - akses ke grup docker setara dengan
akses root. Untuk lingkungan multi-user atau production,
pertimbangkan rootless Docker atau sudo
dengan NOPASSWD sebagai alternatif yang lebih aman.
Perintah paling penting untuk diingat:
sudo usermod -aG docker $USER # Tambah user ke grup docker
newgrp docker # Aktifkan grup di sesi saat ini
docker ps # Verifikasi tanpa sudo
Dengan setup ini, workflow Docker kamu jadi lebih cepat dan bebas hambatan!