채널톡 아이콘

인프런 커뮤니티 질문&답변

이성님의 프로필 이미지

작성한 질문수 5

비전공자도 이해할 수 있는 Docker 입문/실전

[실습] Docker로 MySQL 실행시켜보기 - 3

DOCKER로 MYSQL 실행하기 -3

작성

·

193

0

윈도우 환경에서 wls을 이용하여 docker를 돌리고 있습니다.

docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=admin1234 -v /mnt/c/users/lucig/Downloads/docker-mysql/mydata:/var/lib/mysql mysql
2876a8df0041c8cfefdde95d874bf0d87182d3320a1ee8fa417b41128cd9925e

위에처럼 컨테이너가 뜬 이후에

exec -it로 접속하려고하면 접속이 안되서 로그를 확인해보니

docker logs -f 2876
2025-04-17 06:16:09+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 9.3.0-1.el9 started.
2025-04-17 06:16:09+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2025-04-17 06:16:09+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 9.3.0-1.el9 started.
2025-04-17 06:16:10+00:00 [Note] [Entrypoint]: Initializing database files
2025-04-17T06:16:10.096316Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2025-04-17T06:16:10.097629Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 9.3.0) initializing of server in progress as process 80
2025-04-17T06:16:10.109461Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
2025-04-17T06:16:10.127422Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-04-17T06:16:11.839040Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysqld: Cannot change permissions of the file 'ca.pem' (OS errno 1 - Operation not permitted)
2025-04-17T06:16:14.379413Z 0 [ERROR] [MY-010295] [Server] Could not set file permission for ca.pem
2025-04-17T06:16:14.379482Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2025-04-17T06:16:14.379504Z 0 [ERROR] [MY-010119] [Server] Aborting
2025-04-17T06:16:16.112226Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.

이렇게 나오는데

가장 쉬운 방법은 어떤것이있을까요?

클로드는 아래처럼 답변을 주더라고요

2. 도커 볼륨 사용
Windows 경로를 직접 마운트하는 대신 도커 볼륨을 사용하는 것이 더 안정적입니다:
bash# 도커 볼륨 생성
docker volume create mysql-data

# 볼륨을 사용하여 MySQL 컨테이너 실행
docker run -d -p 3306:3306 --name mysql \
  -e MYSQL_ROOT_PASSWORD=admin1234 \
  -v mysql-data:/var/lib/mysql \
  mysql

도커 볼륨을 사용해도 새로생성한 컨테이너가 데이터를 그대로 사용할 수 있는걸까요?

답변 2

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 이성님! 질문 잘 해주셨습니다:)

경로를 입력하실 때 /mnt/c/users/lucig/Downloads/docker-mysql/mydata로 입력하지 말고

C://users/lucig ...의 형태로 윈도우의 실제 경로로 한 번 입력해보시겠어요~??

윈도우의 경로로 입력했는데도 정상적으로 실행이 안 되신다면

입력하신 명령어와 에러 메시지도 다시 한 번만 댓글 달아주세요~!!

이성님의 프로필 이미지
이성
질문자

/mnt를 제외한 윈도우 경로로 설정했을때도 결국에 되지는 않았고

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin1234 -v mydata:/var/lib/mysql mysql

형태로 리눅스 경로에 폴더를 지정해서 실행하는 형태로 해결 했습니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 이성님.

현재 WSL 환경에서 Docker를 사용하여 MySQL 컨테이너를 실행 중 발생하는 문제에 대해 도움을 드리겠습니다. 로그에 보이는 오류는 파일 시스템의 권한 문제와 관련되어 있으며, 주로 WSL의 파일 시스템 차이에서 기인할 가능성이 큽니다.

문제 원인 이해하기

로그에서 ca.pem 파일의 권한을 변경할 수 없다는 오류는, WSL의 파일 시스템이 MySQL 컨테이너에서 기대하는 방식으로 작동하지 않기 때문입니다. 일반적으로 Windows 경로 (/mnt/c/…)를 마운트할 때 이러한 문제가 발생할 수 있습니다.

해결 방법

  1. Docker 볼륨 사용: Docker 볼륨을 사용하면, Docker가 관리하는 자체 볼륨을 활용하여 이러한 파일 시스템의 차이와 권한 문제를 대안으로 해결할 수 있습니다. 이는 파일 경로의 이슈를 피하는 데 유용합니다.
   # 도커 볼륨 생성
   docker volume create mysql-data

   # 볼륨을 사용하여 MySQL 컨테이너 실행
   docker run -d -p 3306:3306 --name mysql \
     -e MYSQL_ROOT_PASSWORD=admin1234 \
     -v mysql-data:/var/lib/mysql \
     mysql
  1. WSL 환경에서의 경로 마운트 문제 해결: 만약 Windows 경로를 계속 사용해야 한다면, metadata 옵션을 추가하여 마운트하는 방법을 시도해볼 수 있습니다. 예시로는 WSL 터미널에서 다음 명령어를 통해 수행할 수 있습니다:
   sudo mount -t drvfs C: /mnt/c -o metadata,umask=22,fmask=11
  1. Oracle MySQL 문서 참조: 마운트나 파일 시스템의 제한과 마찬가지로, 파일 권한 및 소유자에 대한 자세한 설정이나 권장 사항은 MySQL 공식 문서를 참고하시는 것이 좋습니다.

Docker 볼륨의 데이터 유지

Docker 볼륨을 사용하면 기존 데이터를 모두 포함한 새로운 파일 시스템을 만들므로 데이터가 손실되는 일이 없습니다. 결과적으로, 이 방법은 데이터를 안전하게 관리하고 보존하는 데 매우 효과적입니다. 데이터가 처음 생성될 때의 상태만 유지되지만, 같은 볼륨을 계속 사용하면 해당 데이터가 유지됩니다.

유사한 문제의 해결 방법에 대한 추가 참고

저는 질문자님의 이해를 돕고자, 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.