Sequelize.authenticate () не работает (нет ответа об успехе или ошибке) для облака Google sql соединение внутри Docker - PullRequest
12 голосов
/ 07 мая 2020

Я создаю сервер api с машинописным текстом, express и Sequelize.

Это мой database класс подключения.

export class Database {
  private _sequelize: Sequelize;
  private config: DBConfigGroup = dbConfig;
  private env = process.env.NODE_ENV as string;

  constructor() {
    this._sequelize = new Sequelize({
      dialect: 'postgres',
      database: this.config[this.env].database,
      username: this.config[this.env].username,
      password: this.config[this.env].password,
      host: this.config[this.env].host,
    });
  }

  async connect(): Promise<void> {
    try {
      console.log('start connect');
      await this._sequelize.authenticate();
      console.log('Connection has been established successfully.'.green.bold);
    } catch (error) {
      console.error('Unable to connect to the database:'.red.bold, error);
    }
  }

  async close(): Promise<void> {
    try {
      await this._sequelize.close();
      console.log('Connection has been close successfully.'.red.bold);
    } catch (error) {
      console.error('Unable to close to the database:'.yellow.bold, error);
    }
  }

  get sequelize(): Sequelize {
    return this._sequelize;
  }
}

Итак, в моем server.ts, Я называл это

dotenv.config({
  path: './config/environments/config.env',
});

const database = new Database();
console.log('Init db');
database
  .connect()
  .then(() => {
    console.log('success db ininit');
  })
  .catch((err) => {
    console.log('fail db init: ', err);
  }); 

/**
 * Server Activation
 */
const server = app.listen(PORT, () => {
  console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold);
});

Так что все работает нормально в моей локальной разработке

Но когда я пытаюсь запустить его с docker compose с этой конфигурацией

// docker-compose.yml
version: '3.4'

services:
  api:
    stdin_open: true
    tty: true
    build:
      context: ./api
      dockerfile: Dockerfile.dev
    ports:
      - "5000:5000"
    volumes:
      - /app/node_modules
      - ./api:/app

Это мой Dockerfile.dev файл

FROM node:alpine

ENV NODE_ENV=development

WORKDIR /app

EXPOSE 5000

COPY package.json package-lock.json* ./ 

RUN npm install && npm cache clean --force

COPY . .

CMD ["npm", "run", "dev:docker"]

Но проблема в том, что когда я запускаю docker-compose up --build

, я вижу только эти журналы

api_1  | Init db
api_1  | start connect
api_1  | Server running in development mode on port 5000

Итак, как правило, есть нет ответа, является ли sequelize.authenticate() успешным или неудачным, просто Server running in development mode on port 5000 выйдите из системы и ничего.

Почему не работает внутри docker как в локальном, любой конфигурации, которую я пропустил?

Спасибо

1 Ответ

9 голосов
/ 14 мая 2020

Вы можете попробовать версию node: 10. У меня такая же проблема, но при изменении изображения на node: 10 эта проблема исчезла. Надеюсь помочь вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...