TDCTF Academy Logo TDCTF ACADEMY

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 docker belum 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
tip

Cara paling reliable adalah logout penuh dari desktop/SSH session, lalu login kembali. newgrp hanya 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

peringatan

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:

  • newuidmap dan newgidmap harus terinstall
  • User mapping harus dikonfigurasi di /etc/subuid dan /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!

PADA HALAMAN INI