리눅스 “포트가 이미 사용 중” 오류 해결 (ss, lsof로 프로세스 찾기)
Nginx를 시작하려는데 “bind() to 0.0.0.0:80 failed (98: Address already in use)”, Docker 컨테이너를 띄우려는데 “port is already allocated”가 뜬다. 이미 다른 프로그램이 그 포트를 쓰고 있다는 뜻이다. 이 글에서는 포트 사용 중 오류 상황에서 포트를 점유한 프로세스를 찾고 정리하는 방법을 정리한다. 네트워크 상태를 보는 기본 명령은 리눅스 네트워크 확인 명령어에 있다.

포트 사용 중 오류 메시지 예
| 프로그램 | 메시지 |
|---|---|
| Nginx | bind() to 0.0.0.0:80 failed (98: Address already in use) |
| Docker | Bind for 0.0.0.0:8080 failed: port is already allocated |
| Spring Boot | Web server failed to start. Port 8080 was already in use. |
| Node.js | Error: listen EADDRINUSE: address already in use :::3000 |
포트 사용 중 오류 1단계 누가 쓰고 있는지 찾기
# 80번 포트를 듣고 있는 프로세스 (PID 포함은 sudo 필요)
sudo ss -ltnp | grep ':80 '
# lsof 로 확인
sudo lsof -i :80
# fuser 로 PID만
sudo fuser 80/tcpss 결과의 users:((“nginx”,pid=1234,…)) 부분에서 프로그램 이름과 PID를 확인할 수 있다. ss의 -l은 대기 중(LISTEN), -t는 TCP, -n은 숫자로, -p는 프로세스 정보를 뜻한다.
포트 사용 중 오류 2단계 원인별 정리
같은 서비스가 이미 떠 있는 경우
가장 흔하다. 예를 들어 Nginx가 이미 실행 중인데 다시 nginx 명령으로 실행했거나, 예전에 nohup으로 띄운 앱이 남아 있는 경우다. 서비스로 관리하고 있다면 systemctl로 재시작한다. 서비스 등록은 systemd 서비스 만들기를 참고하자.
sudo systemctl status nginx
sudo systemctl restart nginx다른 웹 서버가 80을 잡고 있는 경우
Ubuntu에 apache2가 함께 설치되어 있으면 Nginx보다 먼저 80 포트를 잡는다. 쓰지 않는다면 끄고 자동 시작도 해제한다.
sudo systemctl disable --now apache2Docker 컨테이너가 쓰는 경우
docker ps --format "table {{.Names}}\t{{.Ports}}"
docker stop 컨테이너이름Docker 포트 설정은 Docker 기본 명령어에 정리했다.
프로세스를 직접 종료해야 할 때
# 정상 종료 요청
sudo kill 1234
# 응답이 없을 때만 강제 종료
sudo kill -9 1234kill -9는 프로세스가 정리할 틈 없이 바로 죽이기 때문에 데이터베이스 같은 프로그램에는 쓰지 않는 것이 좋다. 먼저 서비스 관리 명령으로 끄고, 그래도 안 될 때만 쓴다. 프로세스 관리는 리눅스 프로세스 명령어에 더 자세히 있다.
방금 끈 서버가 바로 다시 안 뜰 때
프로그램을 껐다가 바로 다시 켰는데 같은 오류가 나면, 아직 이전 프로세스가 종료 중일 수 있다. 몇 초 기다린 뒤 다시 ss로 확인하자. 일반적인 서버 프로그램은 재시작 시 이 문제를 피하도록 설정되어 있어 오래 기다릴 일은 드물다.
포트 사용 중 오류 예방
- 한 서버의 포트 배치를 메모해 둔다(예: 80/443 Nginx, 8080 앱, 3306 MySQL).
- 애플리케이션은 nohup 대신 systemd 서비스로 관리해 중복 실행을 막는다.
- Docker 포트는 127.0.0.1:8080:80처럼 로컬에 묶고 Nginx로 연결한다.
- 새 서비스를 띄우기 전에 ss -ltn으로 포트가 비어 있는지 확인한다.
Nginx의 listen 설정은 Nginx core 모듈 문서에서 볼 수 있다.
마무리
포트 충돌은 “누가 쓰고 있나”만 찾으면 대부분 바로 풀린다. sudo ss -ltnp 한 줄을 기억해 두자. 인증서 갱신 점검은 전날 글인 certbot 인증서 갱신 점검에서 볼 수 있다.
첫 댓글을 남겨보세요