Mengatasi Error “Port Already in Use” di Linux

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:

  1. Cari PID:
sudo lsof -i :80

Output contoh:

nginx  1024
  1. 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.

Leave a Comment