본문 바로가기
DOCKER

[비전공자의 Docker ] Docker로 MySQL 실행시켜보기 및 오류

by 미눅스[멘토] 2024. 12. 11.
728x90

 

https://hub.docker.com/_/mysql

 

mysql - Official Image | Docker Hub

Quick reference Supported tags and respective Dockerfile links 9.1.0, 9.1, 9, innovation, latest, 9.1.0-oraclelinux9, 9.1-oraclelinux9, 9-oraclelinux9, innovation-oraclelinux9, oraclelinux9, 9.1.0-oracle, 9.1-oracle, 9-oracle, innovation-oracle, oracle⁠8

hub.docker.com

How to use this image 참고

 

요약 : docker도커야 run구동해 -e환경변수 MYSQL_ROOT_PASSWORD=myPassword 등록해줘 -d백그라운드로 실행시키고 -p포트는 호스트3306:mysql3306이랑 연결해줘 뭐를? mysql을

필요한 환경변수가 있다면 같

실행

docker run -e MYSQL_ROOT_PASSWORD=myPassword -d -p 3306:3306 mysql

 

더 필요한 환경변수가 있다면 아래와 같이 더 넣어주면 됨 나는 블로그 작성용이라 위에거로 함

docker run -p 3306:3306 —name mysql_boot 
-e MYSQL_ROOT_PASSWORD=myPassword 
-e MYSQL_DATABASE=springboot 
-e MYSQL_USER=minwoo
-e MYSQL_PASSWORD=pass 
-d mysql

 

아래와 같은 오류 발생

Error response from daemon: 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

 

원인

호스트 운영체제가 윈도우 11인데 호스트 운영체제에서 MYSQL이 설치되어 있고 서비스를 수행하고 있기 때문에 해당 MYSQL 서비스의 3306포트가 사용되어서 충돌이나 오류발생

 

 

해결

netstat -ano | findstr [포트번] 명령어로 호스트 운영체제(윈도우)의 3306 포트를 사용하는지 확인

PS D:\MinwooTool\docker-mysql> netstat -ano | findstr 3306
  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING       4324
  TCP    [::]:3306              [::]:0                 LISTENING       4324

위 실행결과 3306 포트를 사용하고 있고 프로세스 ID는 4324임을 알수 있음.

 

 

3306 포트를 사용하는 프로세스 제거

PS C:\Users\qkdlf> taskkill /pid 4324 /f
성공: 프로세스(PID 4324)가 종료되었습니다.

 

 

다시 컨테이너 생성 및 실행 시도

docker run -e MYSQL_ROOT_PASSWORD=myPassword -d -p 3306:3306 mysql

 

컨테이너 확인

PS D:\MinwooTool\docker-mysql> docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED          STATUS          PORTS                               NAMES
91a2f852cd85   mysql     "docker-entrypoint.s…"   16 minutes ago   Up 16 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   intelligent_dhawan

 

환경변수 잘 등록되어 있는지 확인 실행 컨테이너로 접속 : docker exec -it [컨테이너ID 3자리 이상] bash

PS D:\MinwooTool\docker-mysql> docker exec -it 91a bash
bash-5.1#

 

환경변수 호출해보기 : echo $MYSQL_ROOT_PASSWORD

PS D:\MinwooTool\docker-mysql> docker exec -it 91a bash
bash-5.1# echo $MYSQL_ROOT_PASSWORD
myPassword
bash-5.1#

 

 

 

이제 DBever나 다른 툴을 사용해서 연결해보자 나는 DBever를 사용하기 떄문에 DBever로 접근해봄

순서1.

Username은 기본root로 설정

Password = 환경변수에 설정한 비밀번호(myPassword)

 

순서2.

Test Connection 연결 확인

 

 

만약 MySQL 연결 시 "Public Key Retrieval is not allowed" 오류가 나온다면 아래 링크가서 해결하자

https://deahan.tistory.com/449

그림으로 요약