Docker Seqeulize Unknown database 에러 해결

버건디·2024년 1월 25일
0

도커

목록 보기
8/10
post-thumbnail

yml 파일내에서

    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 20s
      retries: 10

healthcheck을 통해서 mysql부터 실행시켜준후 express를 실행시켜주었는데도 에러가 발생했다.

docker exec -it mysql컨테이너id mysql -u root -p
SHOW DATABASES;

test라는 스키마가 있는데도 계속 찾을수 없다고 나왔다.

문제는 host 바인딩이다.

- docker-compose.yml

version: "3.8"
services:
  mysql:
    image: "mysql"
    volumes:
      - data:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=test
      - MYSQL_ROOT_PASSWORD=brgndy96
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 20s
      retries: 10
  backend:
    build: ./backend
    ports:
      - "80:80"
    volumes:
      - logs:/app/logs
      - ./backend:/app
      - /app/node_modules
    depends_on:
      mysql:
        condition: service_healthy
volumes:
  data:
  logs:

- sequelize index.js

const sequelize = new Sequelize(
  process.env.MYSQL_DATABASE,
  process.env.MYSQL_USER,
  process.env.MYSQL_ROOT_PASSWORD,
  {
    port: process.env.MYSQL_PORT,
    host: "mysql", // compose.yml의 service이름과 같아야함
    dialect: "mysql",
    logging: false,
    pool: {
      max: 5,
      min: 0,
      acquire: 30000,
      idle: 10000,
    },
  }
);

시퀄라이즈 index.js에서 host는 compose.yml에서 작성해준 mysql의 서비스 이름과 같아야한다.

그래야지 해당 서비스 이름을 도커에서 인식하고 연결시켜주는 것이다.

그후에 compose up을 다시 해주면 정상적으로 실행 된다.

profile
https://brgndy.me/ 로 옮기는 중입니다 :)

0개의 댓글

관련 채용 정보