본문 바로가기

DevOps/Docker

기존 MySQL을 사용하고 있을 경우 Docker Mysql 포트 충돌

728x90
  • 컨테이너 생성 중, 3306:3306 사용했을 때 오류 내용

(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포트는 오직 하나의 소켓만이 사용할 수 있는데 이미 점유중이라는 의미이다.

 

netstat -ano

 

gitbash 혹은 cmd(관리자모드)에 들어가 위 명령어를 실행하면 현재 사용중인 포트 번호들을 볼 수 있다.

 

 

3306포트는 6036 PID를 가진 프로그램이 점유중이다. 6036은 뭐하는 프로그램일까

작업관리자 → 자세히를 들어가면 현재 실행중인 프로그램들의 PID까지 볼 수 있다.

 

 

역시나 기존의 mysql이 사용중이었다. 이것을 해결하기 위해선

  1. 위 프로그램을 종료하고 실행
  2. docker에서 다른 포트 할당

두가지가 있는데 위의 방법은 둘 중 하나는 계속 꺼놔야 하니 좋은 방법이 아니다. 사용중인 여러개의 프레임워크들이 얽혀있을탠데 docker로 옮기는 것도 일이다. 그러므로 도커에서는 다른 포트를 할당해줘야겠다. 보통 3306~3308은 잘 사용하지 않으므로 3307을 추천한다.

docker container run -d --name wpdb -v wpdbvol:/var/lib/mysql --restart=always -e MYSQL_ROOT_PASSWORD=<password> -e MYSQL_DATABASE=NAME -p 3307:3306 mysql:latest

 

이제 정상적으로 컨테이너가 만들어졌다!

로컬 환경의 워크밴치에서 connection을 하나 추가한다.

 

 

여기서 3306이 아닌 3307을 입력하고 , 테스트 커넥션을 진행하면 된다.

도커를 사용하면 기본적으로 localhost를 사용할 수 있다.

3307:3306 이란 포트포워딩이라는 것인데, 만약 127.0.0.1:3307 경로로 접속이 들어왔다면 127.0.0.1:3306로 보내주겠다는 의미이다. 컴퓨터통신에서 배운다.