카테고리 없음

[오류 해결] docker-compose.yml로 데이터베이스 및 테이블 생성

happyst 2024. 8. 19. 22:52

문제: docker-compose.yml 파일 작성 → docker-compose up -d --force-recreate 명령어 실행 → docker container 실행 확인 (O) → database 및 table 생성 확인 (X)

 


docker-compose.yml
version: '3.8'

services:
  mysql:
    container_name: mysql_local
    image: mysql:8.0.30
    volumes:
      - ./db/conf.d:/etc/mysql/conf.d
      - ./db/initdb.d:/docker-entrypoint-initdb.d
    ports:
      - "3307:3306"
    environment:
      - MYSQL_DATABASE=pass_local
      - MYSQL_USER={user}
      - MYSQL_PASSWORD=${password}
      - MYSQL_ROOT_PASSWORD={root_password}
      - TZ=Asia/Seoul

 

./db/ 디렉토리 (호스트)

 

./db/conf.d/custom.cnf
[client]
default-character-set = utf8mb4

[mysqld]
authentication-policy = mysql_native_password

 

./db/initdb.d/create_table.sql
CREATE TABLE `package`
(
    `package_seq`  int         NOT NULL AUTO_INCREMENT COMMENT '패키지 순번',
    `package_name` varchar(50) NOT NULL COMMENT '패키지 이름',
    `count`        int                  DEFAULT NULL COMMENT '이용권 수, NULL인 경우 무제한',
    `period`       int                  DEFAULT NULL COMMENT '기간(일), NULL인 경우 무제한',
    `created_at`   timestamp   NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시',
    `modified_at`  timestamp            DEFAULT NULL COMMENT '수정 일시',
    PRIMARY KEY (`package_seq`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='패키지';

 

./db/initdb.d/insert_data.sql
INSERT INTO package (package_name, count, period, created_at)
VALUES ('Starter PT 10회', 10, 60, '2022-08-01 00:00:00'),
       ('Starter PT 20회', 20, 120, '2022-08-01 00:00:00'),
       ('Starter PT 30회', 30, 180, '2022-08-01 00:00:00'),
       ('무료 이벤트 필라테스 1회', 1, NULL, '2022-08-01 00:00:00'),
       ('바디 챌린지 PT 4주', NULL, 28, '2022-08-01 00:00:00'),
       ('바디 챌린지 PT 8주', NULL, 48, '2022-08-01 00:00:00'),
       ('인바디 상담', NULL, NULL, '2022-08-01 00:00:00');

 

 


docker container 실행 확인

 

docker container 접속해서 mysql database 및 table 생성되었는지 확인

  • database는 생성되었지만, table은 생성되지 않음
docker container 로그 확인
docker logs [container name]

 


해결

./db/initdb.d/insert_data.sql 수정
  • insert_data.sql 파일 맨 위에 다음을 추가한 뒤, docker container 삭제 후 재생성하여 해결함
CREATE DATABASE IF NOT EXISTS pass_local;
USE pass_local;
  • MySQL 데이터베이스에 테이블이 생성된 것을 확인함