[Trouble Shooting] Docker compose

곽태민·5일 전
0

Trouble Shooting

목록 보기
5/5

문제


2개의 서버와 mongoDB, MySQL을 docker-compose를 이용해서 build를 하고, 실행하는 단계에서 문제가 발생했다. MySQL과 연결되어 있는 한 서버에서 Database Connection 관련 에러가 발생했고,

이 문제는 MySQL docker image가 build 되면서 docker container가 준비 상태가 아니라서 발생한 문제였다.

해결


해결하기 위해서 depends_on만 사용하지 않고, healthcheck 옵션을 사용해서 MySQL docker container가 준비 상태에 도달할 때까지 MySQL을 사용하는 docker container server는 대기를 하도록 했다.

  mysql:
    image: mysql:latest
    container_name: mysql
    restart: always
    ports:
      - '3309:3306'
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - custom_network
    healthcheck:
      test: ['CMD', 'mysqladmin', 'ping', '-h', 'localhost', '-uroot', '-proot']
      timeout: 20s
      retries: 5

MySQL docker container가 healthcheck 옵션을 사용하면서 준비 상태까지 도달하게 되면 MySQL을 사용하는 docker container server는 그제서야 docker container 생성을 실행하게 된다.

    depends_on:
      mysql:
        condition: service_healthy
      mongo:
        condition: service_started
    networks:
      - custom_network

MySQL을 사용하는 docker container server에서는 depends_on 옵션에서 mysql docker container service가 service_healthy 상태에 도달할 때까지 대기하도록 했다.

이렇게 yaml 파일을 작성하고 docker-compose up -d 명령어를 실행하게 되면 기대했던 대로 MySQL docker container가 준비 상태에 도달할 때 까지 대기를 하면서 Database Connection 관련 에러가 발생하지 않게 되었다.

profile
Node.js 백엔드 개발자입니다!

0개의 댓글