Sequelize.authenticate()无法在Docker内为google cloud sql连接工作(无成功或错误响应)。

问题描述 投票:7回答:1

我正在用typescript,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里面不能像在本地一样工作,我漏掉了什么配置?

谅谅

node.js google-cloud-platform docker-compose sequelize.js google-cloud-sql
1个回答
5
投票

你可以试试node:10的版本,我也有同样的问题,但是当把图片改成node:10的时候,这个问题就没有了希望能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.