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

SeJongDeveloper님의 프로필 이미지
SeJongDeveloper

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Kafka

maradb dockerfile

작성

·

236

·

수정됨

0

Dockerfile 내용

FROM mariadb
ENV MYSQL_ROOT_PASSWORD test1357
ENV MYSQL_DATABASE mydb
COPY ./mysql_data/mysql /var/lib/mysql
EXPOSE 3306
ENTRYPOINT ["mariadb", "--user=root"]



실습환경
windows 10


mysql_data\mysql 내용

 

에러 메시지
ERROR 2002 (HY000): Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)

 

답변 1

0

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

SeJongDeveloper님, mariadb 이미지를 사용해서 Docker 컨테이너를 만드는 과정에서 발생한 소켓 연결 문제로 보입니다. 제시해 주신 Dockerfile을 볼 때, ENTRYPOINT에서 사용자를 root로 설정하고 있는데요, 이 경우 MariaDB 서비스를 직접 실행하는 대신 관리자 권한으로 mariadb 커맨드 라인을 실행하려고 하시는 것 같습니다.

마리아DB 이미지는 mysqld 서버를 시작하기 위해 자체 스크립트를 사용하기 때문에, ENTRYPOINT를 사용자 정의 할 필요가 없습니다. 기본 ENTRYPOINT는 이미 Docker 이미지 내부에 적절히 설정되어 있으며, 서버가 바로 실행될 수 있게 해 줍니다. ENTRYPOINT를 제거하시고 다시 시도해 보세요.

또한 MariaDB 컨테이너에서 데이터를 지속적으로 보관하려면 볼륨을 올바르게 마운트해야 합니다. Dockerfile에서는 COPY 명령을 사용하여 데이터를 컨테이너 안에 복사하고 있는데, 이 데이터는 컨테이너가 삭제될 때 함께 삭제될 수 있습니다. 지속성을 위해서는 Docker의 볼륨을 사용하는 것이 좋습니다.

수정된 Dockerfile은 다음과 같습니다:

FROM mariadb
ENV MYSQL_ROOT_PASSWORD test1357
ENV MYSQL_DATABASE mydb
VOLUME /var/lib/mysql
EXPOSE 3306

그리고 도커 볼륨을 사용하여 mysql_data/mysql 디렉토리를 마리아DB 컨테이너의 /var/lib/mysql에 마운트하는 명령을 실행해야 합니다. 예를 들어 다음과 같은 명령을 사용할 수 있습니다:

docker run -v /path/to/mysql_data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=test1357 -e MYSQL_DATABASE=mydb -p 3306:3306 --name my-mariadb -d mariadb

위 경로는 실제 mysql_data/mysql 디렉토리가 있는 호스트 머신의 전체 경로로 대체해 주셔야 합니다. 그래야만 호스트와 컨테이너 간에 올바른 데이터 볼륨 공유가 이루어질 수 있습니다.

그렇게 하면 데이터를 지속적으로 보관할 수 있고, 서버 에러가 해결될 가능성이 높습니다.

SeJongDeveloper님의 프로필 이미지
SeJongDeveloper

작성한 질문수

질문하기