Docker 컨테이너 실행시 포트 충돌 해결 _ (feat. MySQL)
도커에서 MySQL 컨테이너를 실행하기 위해
이미지를 받아와서 docker run을 실행하였습니다.
docker run --name mysql-local -p 3306:3306/tcp -e MYSQL_ROOT_PASSWORD=test -d mysql:8
이미지를 잘 받아오고 컨테이너 실행까지 잘 하는 듯 하였으나... 뚜둥.. error가 떴습니다.
에러 내용을 확인해보면, 포트 사용이 불가능하다는 내용과 함께,
각 socket address(protocol/network address/port)의 사용은 오직 하나만 허용된다는 설명이 나옵니다.
이 말은, 3306:3306포트로 컨테이너 생성을 요청하였는데
이미 3306포트를 다른 무언가(?)가 점유하고 있다는 뜻인 것 같습니다.
일단 3306 포트를 누가 쓰고있긴아래와 같이 삭제하구요.
docker ps -a # 도커 컨테이너 목록 로드(미실행 컨테이너까지)
docker rm <image ID> # 해당 컨테이너 삭제
docker ps -a # 컨테이너가 잘 삭제되었는지 확인
이제 아래 코드를 실행하여 사용중인 프로세스를 확인합니다.
netstat -ano | findstr 3306
분명히 컨테이너를 삭제하였지만, 3306 포트가 사용중으로 보입니다.
맨 우측에 6116이라고 PID No가 보이시죠? 이 PID를 통해 프로세스를 확인해보겠습니다.
이제 그럼 누가(어떤 프로세스가) 사용중인지 확인해보겠습니다.
tasklist | findstr <PID NO>
tasklist를 확인하면 프로세스 이름이 보입니다.
이미 로컬에서 mysql을 설치해서 사용하고 있고,
설치된 mysql이 해당 포트를 점유하고 있는 상태에 3306포트를 할당하려하여 에러가 발생한 것 입니다.
예상할 수 있는 해결방법은 2가지 입니다.
1) 3306 포트를 포기 못한다면?! 기존 프로세스를 삭제하고 3306 포트를 할당한다.
아래 taskkill 커맨드를 활용해 테스크 삭제
taskkill /pid <PID NO> /f
2) 3306 포트를 포기하고 새로운 포트를 할당
docker run --name mysql-local -p 3307:3306/tcp -e MYSQL_ROOT_PASSWORD=test -d mysql:8
추가로, 포트를 변경했을 경우, MySQL에 접속하려면 아래와 같이 접속해야 합니다.
(*꼭 별도의 포트번호를 입력해주어야 하고, 그렇지 않을 경우 기본 3306 포트로 접속하게 됩니다.)
mysql -u root -h 127.0.0.1 -P 3307 -p
'DEV > 개발환경' 카테고리의 다른 글
Error 해결 : running scripts is disabled on this system (2) | 2024.12.13 |
---|---|
WSL에 몽고디비(MongoDB) 설치하기 (0) | 2024.06.23 |
WSL에 MySQL 설치하기 (0) | 2024.06.23 |
Windows WSL Miniconda 설치하여 Python 환경 setting하기 (0) | 2024.06.22 |
Windows WSL(ubuntu 22.04)에 Java 11 설치하기 (0) | 2024.06.22 |
댓글