가장 먼저 확인할 것
이전 프로세스가 안 죽고 남아 있다
터미널만 닫았거나 재시작이 깔끔하지 않아 예전 프로세스가 포트를 계속 붙잡고 있습니다.
다른 후보가 하나씩 제외되면서 남은 원인입니다.
포트를 잡고 있는 프로세스의 이름과 번호를 확인합니다.
ss -ltnp | grep :3000그다음 위 명령에 나온 pid를 정확히 지정해 종료합니다. 이름으로 한꺼번에 죽이면 엉뚱한 프로세스까지 함께 내려갑니다.
SERVER ERROR CLINIC
내가 열려는 포트를 다른 프로세스가 이미 잡고 있습니다. 앱이 시작조차 못 하고 멈춘 상태입니다.
이 도구는 여러분의 서버에 접속하지 않습니다. 답한 내용만으로 확인할 순서를 정해주는 도구이며, 실제 로그를 대신하지 않습니다.
어느 로그를 볼까 로그를 뒤질 필요가 거의 없습니다. 그 포트의 주인을 찾는 명령 한 줄이면 끝납니다.
원인 후보 3개
포트를 이미 잡고 있는 주인을 찾으면 원인이 바로 갈립니다.
서버에서 이 명령을 쳐보고, 아래에서 결과를 골라 주세요.
ss -ltnp | grep :3000가장 먼저 확인할 것
터미널만 닫았거나 재시작이 깔끔하지 않아 예전 프로세스가 포트를 계속 붙잡고 있습니다.
다른 후보가 하나씩 제외되면서 남은 원인입니다.
포트를 잡고 있는 프로세스의 이름과 번호를 확인합니다.
ss -ltnp | grep :3000그다음 위 명령에 나온 pid를 정확히 지정해 종료합니다. 이름으로 한꺼번에 죽이면 엉뚱한 프로세스까지 함께 내려갑니다.
아니라면 다음
개발 도구나 시스템 서비스가 이미 그 번호를 쓰고 있습니다. 3000·5432·8080처럼 흔한 번호에서 자주 겹칩니다.
누가 쓰고 있는지 이름으로 확인합니다.
ss -ltnp | grep :3000그다음 상대를 죽이기보다 내 앱의 포트를 옮기는 쪽이 안전합니다. 데이터베이스나 시스템 서비스일 수 있습니다.
아니라면 다음
컨테이너의 포트 매핑이 호스트 포트를 잡고 있습니다. 컨테이너 목록에는 안 보여도 매핑은 살아 있을 수 있습니다.
어떤 컨테이너가 어느 호스트 포트를 열었는지 봅니다.
docker ps --format '{{.Names}}\t{{.Ports}}'그다음 쓰지 않는 컨테이너를 내리거나 매핑 포트를 바꿉니다. 같은 컴포즈 파일을 두 번 올린 건 아닌지도 확인합니다.
실험을 마쳤다면