Sequelize无法连接到Docker上的Postgres

时间:2020-05-11 01:01:29

标签: node.js postgresql docker docker-compose sequelize.js

当我尝试运行服务器时,sequelize无法连接到数据库,因此没有创建任何模型。

我的docker-compose

cor2

我的app.js

version: "3.7"
services:
   backend:
    build: ./Trademon-Backend
    environment:
      DB_USER: postgres
      DB_PASSWORD: postgres
      DB_NAME: Trademon
      DB_HOST: database
      DB_PORT: 5432
      DB_DIALECT: postgres
      DB_RECREATE: 1 # To recreate database
      JWT_SECRET: TrademonSecret
    ports:
      - "8000:8000"
    volumes:
      - ./Trademon-Backend:/backend/
      - /backend/node_modules/
    depends_on:
      - database
    command: ["./wait-for-it.sh", "database:5432", "--", "nodemon"]

  database:
    image: postgres:latest
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: Trademon
    volumes:
      - ~/databases/Trademon:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 30s
      timeout: 30s
      retries: 3

我的续集配置

const express = require("express");
const path = require("path");
const cookieParser = require("cookie-parser");
const logger = require("morgan");
const passport = require("passport");

const db = require("./models/index").sequelize;

const usersRouter = require("./routes/v1/users");

const app = express();

const RECREATE_DB = !!+process.env.DB_RECREATE || false;

require("./config/passport");

/**
 * Passport initialization
 */
app.use(passport.initialize());

/**
 * Database connection
 */

console.log("Trying to connect to database...");

try {
  db.authenticate();
  console.log("Connection to database has been established successfully.");

  if (RECREATE_DB) {
    console.log("Recreating database!");
    db.sync({ force: true });
  }
} catch (err) {
  console.error("Unable to connect to the database:", err);
}

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));

app.use("/v1/users", usersRouter);

app.use((req, res) => {
  res.status(404).send("Sorry this page does not exist!");
});

module.exports = app;

My log on console

我没有从db.authenticate()中得到错误,但是什么也没发生,执行继续到下一行(console.logs)。

有帮助吗?


编辑: 这与节点v14不兼容,因此降级到v13或LTS都解决了我的问题。

1 个答案:

答案 0 :(得分:0)

停止应用程序:

docker-compose down

清理数据库文件:

rm -rf ~/databases/Trademon/*

然后重新开始:

docker-compose up

,然后还原数据库备份(如果有)。