본문 바로가기
Docker

(오류 해결)Docker로 띄운 MySQL 컨테이너 Django와 연동하기

by eoruadl 2023. 3. 6.

로컬에서 띄운 Django와 Docker로 MySQL 컨테이너를 생성하여 연동하는 과정에서 여러가지 이슈가 생겨 포스팅을 한다.

 

로컬에 설치되어있는 MySQL은 5.7 버전이라 8.0버전의 MySQL 서버를 독립적으로 설치하고 관리하고 싶어 컨테이너를 생성하였다.

 

먼저 Docker 컨테이너 생성 과정이다.

도커가 설치되어있고, mysql 이미지를 가져온 상태라고 가정한다.

docker run -d --name mysql-db \
-e MYSQL_ROOT_PASSWORD={PASSWORD} \
-p 3307:3306 mysql:latest

터미널에서 위의 명령어를 입력하면 컨테이너가 생성된다.

명령어를 자세히 살펴보면

-d : 백그라운드에서 실행 가능하도록

--name : 컨테이너 이름

-e : 환경변수 설정 / MYSQL_ROOT_PASSWORD 는 root 계정의 비밀번호를 설정한다.

-p : 포트번호 지정 / MySQL의 기본포트는 3306이다. 나는 외부포트번호를 3307로 설정해주었다.

마지막 mysql:latest 이미지를 사용하겠다는 의미이다.

 

docker ps 명령어를 입력해보면 컨테이너가 생성되어 실행된 것을 확인할 수 있다.

 

docker exec -it mysql-db bash 명령어를 이용해 mysql 서버로 진입 후 mysql에 접속한다.

 

그리고 CREATE DATABASE myshop; 을 통해 Django에서 사용할 데이터베이스를 하나 생성해주었다.

그러고 django에서 settings.py를 통해 데이터베이스를 설정해주었다.

처음에 이렇게 설정을 해주고 서버를 실행시키니 에러가 발생했다.

(1045, "Access denied for user 'root'@'localhost' (using password: YES)") 에러가 발생해서 알아보니 비밀번호가 설정되어 있지 않거나 비밀번호를 틀렸을 경우 발생하는 에러라고 한다. 분명 비밀번호는 설정되어 있고 몇번을 확인했지만 틀리지 않았다...

 

ip 주소의 문제인가 싶어 docker 컨테이너의 ip주소를 확인해보았다.

확인 후 HOST를 바꿔주었다.

버퍼가 걸리면서 주소를 못찾아가는 것 같았다.

 

그렇다면 노트북의 고정 IP를 넣어보자는 생각을 했다.

 

터미널에서 ifconfig | inet 명령어를 통해 IP주소를 확인해서 HOST에 넣어준 후 실행

그러니 새로운 오류가 발생했다.

(2059), "Authentication plugin 'caching_sha2_password' cannot be loaded 오류인데 구글링을 해보니 MySQL 8.0부터는 default_authentication_plugin 이 'mysql_native_password' 에서 'caching_sha2_password' 로 기본값 설정이 바뀌었다고 한다. sha2을 사용하려면 플러그인을 따로 설치해주어야 했다.

그래서 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; 로 설정을 바꿔주었다. 

그런 후 장고 서버를 실행을 해보니

 

정상적으로 실행이 되는 것을 확인 할 수 있다.

댓글