[Error] 도커 컨테이너 생성시 포트 충돌

Ho Saint·2022년 8월 23일
2

에러실록

목록 보기
2/2

docker Error invoking remote method 'docker-start-container': Error: (HTTP code 500) server error - Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

 도커 컨테이너 생성시 위와 같은 에러 메시지가 뜨면서 생성은 되지만 컨테이너가 실행이 안 되는 문제가 발생한다. 3306 포트가 이미 사용중이라 충돌이 발생하는 문제같다.

C:\Users\Seong>netstat -ano | findstr 3306
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 6868
TCP 0.0.0.0:33060 0.0.0.0:0 LISTENING 6868
TCP [::]:3306 [::]:0 LISTENING 6868
TCP [::]:33060 [::]:0 LISTENING 6868

 일단 어떤 프로세스가 3306 포트를 사용중인지 확인해본다. PID 6868인 프로세스가 현재 3306 포트를 점유중인 것을 볼 수 있다.

C:\Users\Seong>tasklist | findstr 6868
mysqld.exe 6868 Services 0 4,252 K

 다시 tasklist와 PID를 사용해 검색해보면 프로세스 이름이 나온다. 로컬에 설치된 mysql이 이미 3306포트를 점유 중인 상황에서 컨테이너에 3306 호스트 포트를 할당해서 발생한 문제였다.

 이를 해결 하기 위해선 두가지 방법이 가능하다.

C:\Users\Seong>taskkill /pid 6868 /f

 첫번째는 PID를 사용하여 현재 실행 중인 프로세스를 종료하고 도커 컨테이너를 실행시키는 방법이다.

C:\Users\Seong>netstat -ano | findstr :3307

 두번째는 컨테이너에 3306이 아닌 다른 포트르 할당하여 생성하는 방법이다. 먼저 3307 포트가 사용 중인지 확인해본다. 검색 결과가 나오지 않는 것으로 보아 3307 포트는 현재 사용중이지 않다.

C:\Users\Seong>docker run --name mysql-sample -e MYSQL_ROOT_PASSWORD= -d -p 3307:3306 mysql:latest

호스트의 3307 포트와 컨테이너의 3306 포트를 연결하여 생성해주면 에러없이 잘 실행이 된다.

profile
열정보다 시스템. 실수를 막을 수 있는 프로세스.

0개의 댓글