1 분 소요

문제 상황

아래와 같이 도커로 기동한 mysql 컨테이너에 한글이 깨져 ???으로 저장된다.
스크린샷 2023-06-21 오후 4 08 45

문제 원인

도커 컨테이너의 한글 인코딩 설정이 안되어있어 발생하는 문제였다.
docker-compose.yml 에서 아래와 같이 설정했지만, Client charactersetConn. characterset은 도커 컴포즈에서 설정할 수 없다고 한다ㅜ
스크린샷 2023-06-28 오전 1 35 18

해결 방법

시도 1

원래는 이 글이 글을 참고하여 프로젝트 안에서 my.cnf 파일을 생성한 뒤 docker-compose.yml을 통해 mysql 컨테이너에 마운트 하려 했었다.

스크린샷 2023-06-29 오전 12 36 22
하지만 의도와는 다르게 my.cnf라는 이름의 “빈 디렉토리” 가 생성되었다.

시도 2 - 해결

mysql 컨테이너 안에 vim 설치 후 my.cnf 직접 생성한 뒤 볼륨 마운트하여 해결했다!
우선 mysql 컨테이너 내부에 접속해서 아래 명령어들을 실행한다.

OS 확인

cat /etc/*-release

컨테이너에 vim 설치

vim을 설치하기 위해 yum, dnf, apt-get 등의 커맨드를 시도해보았지만 모두 command not found를 뿜었다..
이 글을 참고하여 redhat ootpa는 microdnf 패키지 매니저를 사용한다는 사실을 알았다.

$ microdnf install vim

my.cnf 파일 생성 및 내용 작성

# mysql 컨테이너 접속
docker exec -it my_mysql /bin/bash

# mysql 설정파일 생성
vim etc/mysql/conf.d/my.cnf

아래처럼 내용 작성

[mysqld]
character-set-client-handshake = FALSE
character-set-server           = utf8mb4
collation-server               = utf8mb4_unicode_ci
secure-file-priv               = ""

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4

docker-compose 볼륨 마운트

프로젝트의 docker.compose.yml 파일에 볼륨 마운트를 한다.

version: '3'
services:
  database:
    container_name: my_mysql
    image: mysql
    volumes:
      - ./db/conf.d:/etc/mysql/conf.d # ✅
    ...

변경 확인

컨테이너 재기동 후 확인해보자!

변경 전
스크린샷 2023-06-28 오전 1 32 24

변경 후
스크린샷 2023-06-28 오전 1 32 55

이제 한글이 깨지지 않고 잘 보인다!
스크린샷 2023-06-28 오전 1 27 27



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기