Notice
suyeonme
[Docker] docker-compose.yml의 init.sql이 작동하지 않는 경우 해결 방법 본문
프로그래밍👩🏻💻/Docker
[Docker] docker-compose.yml의 init.sql이 작동하지 않는 경우 해결 방법
suyeonme 2022. 8. 21. 18:29docker-compose.yml
docker-compose.yml 파일의 volumns에 ./init.sql:/docker-entrypoint-initdb.d/init.sql와 같이 추가하면 컨테이너가 시작할 때init.sql 파일이 실행된다.
version: '3.8'
services:
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: ${DB_NAME}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
ports:
- '3306:3306'
volumes:
# 데이터 베이스 초기화(init.sql)
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
volumes:
db:
driver: local
init.sql
docker-compose.yml과 같은 위치(root)에 init.sql 파일을 생성한다. 아래 파일의 경우, 컨테이너가 시작될 때 User테이블을 생성한다.
DROP DATABASE IF EXISTS `mysql-db`;
CREATE DATABASE `mysql-db`;
USE `mysql-db`;
DROP TABLE IF EXISTS `User`;
CREATE TABLE `User` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(20),
`company` VARCHAR(20),
`position` VARCHAR(20)
);
위와 같이 수정한 뒤, docker-compose restart를 했으나 init.sql이 실행되지 않았다.
해결 방법
1. docker-compose.yml의 환경변수에 MYSQL_USER: user를 추가한다. (디폴트로 root user가 생성됨)
2. 데이터베이스 volumns를 클리어한다.
# volumns 클리어
docker volume prune
# volumns가 클리어되었는지 확인
docker volume ls
# db 컨테이너가 생성한 filesystemp 클리어
rm -rf ./cms/conf/mysql
# 컨테이너 재빌드
docker-compose up -d --build
3. docker-entrypoint-initdb.d 폴더로 이동후 init.sql 파일이 존재하는지 확인
# db 컨테이너 CLI로 접속후
# docker-entrypoint-initdb.d 폴더로 이동
cd docker-entrypoint-initdb.d
# 제대로 실행되었다면 init.sql 파일이 존재
ls
# init.sql
'프로그래밍👩🏻💻 > Docker' 카테고리의 다른 글
[Docker] docker-compose에서 환경변수 사용하기 (0) | 2022.08.21 |
---|
Comments