Salah satu error yang paling sering muncul saat menjalankan server seperti Nginx, Apache, Docker, atau aplikasi custom adalah:
Error: Port already in use
Artinya port yang ingin kamu pakai sudah digunakan oleh proses lain.
Contoh kasus umum:
- Nginx tidak bisa start karena port 80 dipakai
- WireGuard gagal bind karena port 51820 sudah diambil
- Docker container gagal jalan karena port host bentrok
- Aplikasi Python/Golang error saat listen port
Di artikel ini kita bahas cara mengecek, mencari proses yang memakai port, membunuh proses, dan mengatasi secara permanen.
Kenapa Port Bisa Terpakai?
Beberapa alasan umum:
- Ada service bawaan Ubuntu yang memakai port (misal Apache pakai port 80)
- Proses lama belum mati
- Docker container masih berjalan
- Aplikasi crash tetapi port belum dilepas (TIME_WAIT)
- Ada service otomatis seperti systemd-resolved (port 53)
Solusinya beda-beda tergantung prosesnya.
1. Cek Port dengan lsof
Cara paling mudah:
sudo lsof -i :PORT
Contoh: mau cek port 80
sudo lsof -i :80
Hasilnya:
nginx 1024 root 6u IPv4 12345 TCP *:http (LISTEN)
Artinya port 80 dipakai oleh nginx.
2. Cek dengan ss (lebih modern)
sudo ss -tulpn | grep :PORT
Contoh:
sudo ss -tulpn | grep :51820
Output contoh:
udp UNCONN 0 0 0.0.0.0:51820 *:* users:(("wg-quick",pid=551))
3. Cek Semua Port yang Terbuka
sudo ss -tulpn
Ini membantu melihat service apa saja yang aktif.
4. Matikan Proses yang Memakai Port
Jika ingin mematikan proses yang memakai port:
- Cari PID:
sudo lsof -i :80
Output contoh:
nginx 1024
- Kill:
sudo kill -9 1024
5. Stop Service Sistem yang Memakai Port
Jika proses berasal dari service systemd:
Cek nama service:
systemctl status nginx
Stop:
sudo systemctl stop nginx
Disable agar tidak otomatis:
sudo systemctl disable nginx
6. Mengatasi Jika Docker Memakai Port
Cek container:
docker ps
Hentikan:
docker stop NAMA_CONTAINER
Hapus jika perlu:
docker rm NAMA_CONTAINER
7. Port 53 Terpakai oleh systemd-resolved
Ini error umum saat install DNS server seperti AdGuard, Unbound, atau Pi-hole.
Cek:
sudo systemctl status systemd-resolved
Jika pakai port 53 dan ingin mematikannya:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
Lalu edit resolv.conf:
sudo nano /etc/resolv.conf
Isi:
nameserver 1.1.1.1
8. Mengatasi port TIME_WAIT (port belum dilepas)
Kadang aplikasi crash dan port masih status TIME_WAIT.
Cek:
sudo ss -tan | grep TIME_WAIT
Solusi: restart aplikasi atau reboot server.
9. Ganti Port Jika Tidak Bisa Mengosongkan
Kadang aplikasi wajib berjalan tapi perlu port lain.
Edit config aplikasi dan ganti port, contoh:
NodeJS:
app.listen(3001)
Nginx:
listen 8080;
Docker:
docker run -p 8080:80 nginx
WireGuard:
ListenPort = 51821
10. Tips Pencegahan
Agar tidak sering bentrok port:
- Catat port yang dipakai aplikasi
- Jangan menjalankan aplikasi yang listen port sama
- Periksa service bawaan Ubuntu (misal Apache)
- Gunakan port standar jika memungkinkan
- Restart server jika port banyak TIME_WAIT
Kesimpulan
Error “Port already in use” sangat umum di Linux, terutama saat menjalankan server. Dengan perintah lsof dan ss, kamu bisa langsung tahu proses mana yang memakai port. Setelah itu tinggal stop, kill, atau pindahkan port.