작성
·
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
디렉토리가 있는 호스트 머신의 전체 경로로 대체해 주셔야 합니다. 그래야만 호스트와 컨테이너 간에 올바른 데이터 볼륨 공유가 이루어질 수 있습니다.
그렇게 하면 데이터를 지속적으로 보관할 수 있고, 서버 에러가 해결될 가능성이 높습니다.