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

김도현님의 프로필 이미지
김도현

작성한 질문수

Airflow 마스터 클래스

도커컴포즈 yaml 해석

DB volume 설정 - 컨테이너 재기동시 DBeaver 테이블 사라지는 경우

해결된 질문

작성

·

349

1

안녕하세요, docker volume 설정에 관해서 궁금한 점이 있어 질문드립니다.

 

(상황설명)

postgres 컨테이너 올리는 내용을 참고하여 mariadb 컨테이너를 올리고자 하는 상황입니다. (docker-compose.yaml에서 mariadb 컨테이너 내용 추가 --> docker compose up --> dbeaver 연결)

 

(질문)

도커의 경우 컨테이너를 내리면 데이터가 모두 사라지기 때문에, 데이터를 영속적으로 저장하고 있기 위해서 볼륨을 설정한다고 이해했습니다. 제가 이해한 바에 따르면 DB 컨테이너에서 볼륨을 지정했을 때엔, 도커를 재기동해도 데이터가 남아있게 되는 것인데 --> 도커 재기동시 dbeaver mariadb의 테이블과 데이터가 사라지게 되는 상황이 맞는 걸까요..?

 

도커 재기동시에도 dbeaver 데이터를 남겨두고 싶은데 제가 볼륨 설정을 잘못한 것인지? 혹은 제가 볼륨에 대한 이해한 것이 잘못 되었다면 어떻게 설정해야 재기동시에도 dbeaver mariadb 데이터가 남아있을 수 있을지? 여쭤봅니다.

 

*도커 재기동 => docker compose down / docker compose up -d


(참고내용)
#docker-compose.yaml

services:
  mariadb:
    image: mariadb:10
    container_name: mariadb-container
    environment:
      MYSQL_USER: user
      MYSQL_PASSWORD: passwd
      MYSQL_ROOT_PASSWORD: root_pw
      MYSQL_DATABASE: mariadb
      TZ: Asia/Seoul
    volumes:
      - mariadb-db-volume:/var/lib/mysql/data
    restart: always
    ports:
      - 3307:3306
    networks:
      network_custom:
        ipv4_address: 172.28.0.2
      
...


volumes:
  postgres-db-volume:
  mariadb-db-volume:

networks:
  network_custom:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16
          gateway: 172.28.0.1


#sudo docker volume ls

스크린샷 2024-01-17 121130.png

#sudo docker inspect dhkim_mariadb-db-volume

스크린샷 2024-01-17 121317.png

#volume mount directory

cd /var/lib/docker/volumes/dhkim_mariadb-db-volume/_data
ls -al

스크린샷 2024-01-17 121417.png

#도커재기동시 dbeaver 화면(table 사라짐)

스크린샷 2024-01-17 121506.png

답변 1

1

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 김도현님!

아무래도 mysql 의 볼륨 마운트 위치를 잘못 지정하신것 같습니다.

mysql의 default 볼륨 위치는 /var/lib/mysql 입니다. (/data 제거)

mysql 접속 후 아래 명령 수행하시면 (@가 2개입니다) 디폴트 저장위치를 확인할 수 있습니다.

select @@datadir 

그래서 docker-compose.yaml 파일에서 아래처럼 작성하시면 되지 않을까 하네요 ^^

     volumes:
      - mariadb-db-volume:/var/lib/mysql

 

한번 해보시고 알려주세요.

 

김도현님의 프로필 이미지
김도현
질문자

안녕하세요!

 

알려주신대로 mysql default 볼륨 위치를 수정하니 볼륨이 정상적으로 사용되는걸 확인했습니다. postgres 디폴트 위치와 비슷하게 지정하면 될 줄 알았는데 그게 아니었네요..

 

몇일동안 해결이 안되어서 엄청 고생했는데 이렇게 빨리 해결해주셔서 감사드립니다!

 

#docker-compose.yaml

services:
  mariadb:
    image: mariadb:10
    container_name: mariadb-container
    environment:
      MYSQL_USER: user
      MYSQL_PASSWORD: passwd
      MYSQL_ROOT_PASSWORD: root_pw
      MYSQL_DATABASE: mariadb
      TZ: Asia/Seoul
    volumes:
      - mariadb-db-volume:/var/lib/mysql
    restart: always
    ports:
      - 3307:3306
    networks:
      network_custom:
        ipv4_address: 172.28.0.2
      
...


volumes:
  postgres-db-volume:
  mariadb-db-volume:

networks:
  network_custom:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16
          gateway: 172.28.0.1

image

#도커재기동 후에도 테이블 & 데이터 존재

image

김도현님의 프로필 이미지
김도현

작성한 질문수

질문하기