Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

Docker에서 “port is already allocated”가 나오나요? 변경 전에 소유자를 증명하세요

충돌은 다른 컨테이너, 호스트 프로세스, 중복 Compose 매핑 또는 데몬 상태일 수 있습니다. 정확한 호스트 IP·프로토콜·포트를 고정하고 검증된 소유자만 바꾸세요.

변경 전에 정확한 Docker host tuple 소유자를 증명하는 원본 일러스트.
원본 일러스트: 요청 tuple에서 최소 검증 변경으로 이동합니다. Watch at Ease

이 오류는 Docker가 호스트 socket tuple 하나를 확보하지 못했다는 뜻일 뿐 소유자를 증명하지 않습니다. 모든 리스너를 죽이거나 관련 없는 컨테이너를 지울 근거가 아닙니다.

먼저 0.0.0.0, TCP, 8080처럼 호스트 IP, 프로토콜, 포트를 적고 같은 tuple로 Docker 매핑과 호스트 리스너를 대조하세요.

정확한 tuple과 Docker context 고정

전체 오류, context, Compose project/file, host IP/port, container port, TCP/UDP를 기록하세요. 단순히 “8080”이라고 줄이지 마세요.

유효 Compose 설정이나 docker run을 보존하고 중복 매핑, override, replica, 두 서비스의 같은 요청을 확인하세요.

모든 Docker 매핑 찾기

정확한 포트와 프로토콜로 docker ps -a publish filter를 실행하고 container와 project label을 확인하세요. 관련 context도 모두 검사합니다.

다른 프로젝트의 실행 중 container가 소유자라면 workload 영향을 확인한 뒤에만 중지하거나 remap하세요.

호스트 listener를 독립적으로 증명

Linux는 ss, Windows는 Get-NetTCPConnection LocalPort로 필터링하고 local address와 owning process를 대조하세요.

PID를 service/executable에 연결하세요. docker-proxy/dockerd면 container 쪽, 다른 프로그램이면 host-owner 분기입니다.

분류 후 수리 선택

container owner, host process, duplicate config 각각에서 검증된 한 소유자만 변경하세요.

목록이 모두 비어 있으면 logs, version, context, network mode, 실패 command를 저장하고 restart/upgrade를 제한된 진단으로 사용하세요.

양쪽 exit test로 종료

수리 후 Docker mapping과 host listener를 다시 실행해 의도한 소유자만 정확한 tuple을 보유하는지 확인하세요.

서비스를 시작하고 게시 mapping, 예상 위치의 연결, exit code를 기록하세요.

Docker mapping, host socket, daemon state를 나누는 원본 일러스트.
원본 일러스트: 같은 오류에도 세 소유권 계층이 있습니다. Watch at Ease