티스토리 뷰

이번에 프로젝트를 시작하면서 docker로 database 환경 구축했습니다.
database는 mysql을 사용하고 로컬 개발용 db과 테스트용 db로 나눴습니다.

 

두 개의 database를 구성하기 위해서 port와 env file 경로를 다르게 명시해주었습니다.

아래는 docker compose 파일과 env 파일 예시입니다.

홈 디렉토리({home directory})는 비워두었습니다.

# docker-compose.yml
version: '3.8'

services:
  dev-db:
    image: 'mysql:8.0'
    ports:
      - '3306:3306'
    command: --default-authentication-plugin=mysql_native_password
    env_file:
      - .env.development
    environment:
      MYSQL_ROOT_PASSWORD: '${DB_ROOT_PASSWORD}'
      MYSQL_ROOT_HOST: "%"
      MYSQL_DATABASE: '${DB_DATABASE}'
      MYSQL_USER: '${DB_USERNAME}'
      MYSQL_PASSWORD: '${DB_PASSWORD}'
    volumes:
      - '/{home directory}/dev/mysql:/var/lib/mysql'
    healthcheck:
      test: [ "CMD", "mysqladmin", "ping", "-p${DB_ROOT_PASSWORD}" ]
      retries: 3
      timeout: 5s
  test-db:
    image: 'mysql:8.0'
    ports:
      - '3307:3306'
    command: --default-authentication-plugin=mysql_native_password
    env_file:
      - .env.test
    environment:
      MYSQL_ROOT_PASSWORD: '${DB_ROOT_PASSWORD}'
      MYSQL_ROOT_HOST: "%"
      MYSQL_DATABASE: '${DB_DATABASE}'
      MYSQL_USER: '${DB_USERNAME}'
      MYSQL_PASSWORD: '${DB_PASSWORD}'
    volumes:
      - '/{home directory}/test/mysql:/var/lib/mysql'
    healthcheck:
      test: [ "CMD", "mysqladmin", "ping", "-p${DB_ROOT_PASSWORD}" ]
      retries: 3
      timeout: 5s
# .env.development
DB_DATABASE=databasename
DB_USERNAME=username
DB_PASSWORD=userpassword
DB_ROOT_PASSWORD=rootpassword

docker document에서 env_file 경로를 명시하는 방법을 확인하고 적용했지만, docker-compose up 명령어로 다중 컨테이너 앱을 시작했을 때, 이상하게도 MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD 변수 값이 없다고 에러가 발생했습니다.

 

env_file 경로, 파일 명, env파일 내 환경 변수 key 값이 docker compose 파일에서 사용하는 변수 이름과 일치하는지 확인했지만 다른 부분은 없었습니다. 검색도 해봤지만 원인이 무엇인지 찾지 못했습니다.

 

그러던 중 정상적인 해결 방법은 아니지만 일단 기록으로 남겨보겠습니다.

 

docker compose 파일에서 env_file을 명시할 수 있지만 cli에서도 명시할 수 있습니다.

그 점을 이용해서 docker compose 파일 내 test-db 컨테이너 설정을 주석처리하고 docker-compose --env-file ./.env.development up -d 를 해보니 정상적으로 데이터베이스가 작동합니다. docker-compose down 후 test db쪽도 똑같이 해주면 됩니다. 따로따로 실행했을 때 잘 작동하는 걸 확인한 후 주석을 다 풀고 docker-compose up -d 명령어로 시작을 해보면 두 데이터베이스 모두 정상 작동합니다.

'docker' 카테고리의 다른 글

docker compose로 spring과 mysql 서비스 구축  (0) 2023.07.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함