【问题标题】:Cannot connect to Postgres database with Sequelize using docker-compose无法使用 docker-compose 通过 Sequelize 连接到 Postgres 数据库
【发布时间】:2022-01-24 01:54:35
【问题描述】:

我无法验证我的 postgres 数据库。我正在使用 docker-compose。请在下面找到相关文件和日志。我的连接字符串有问题吗?

docker-compose.yml

version: "3.8"
services:
  app:
    build:
      context: ./
      target: dev
    volumes:
      - .:/src
    command: npm run start:dev
    ports:
      - "3000:3000"
    depends_on:
      - postgres
    environment:
      DATABASE_URL: postgres://votetracker@postgres/codes
      POSTGRES_PASSWORD: password
      NODE_ENV: development
      DEBUG: nodejs-docker-express:*
  postgres:
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: codes

db.js

const { Sequelize } = require("sequelize");
const sequelize = new Sequelize("postgres://user:pass@database:5432/codes");

const authenticate = async () => {
  try {
    await sequelize.authenticate();
    console.log("Connection has been established successfully.");
  } catch (error) {
    console.error("Unable to connect to the database:", error);
  }
};
module.exports = { authenticate };

运行docker-compose up时,输出如下:

postgres_1  | The files belonging to this database system will be owned by user "postgres".
postgres_1  | This user must also own the server process.
...
postgres_1  | Success. You can now start the database server using:
postgres_1  |
postgres_1  |     pg_ctl -D /var/lib/postgresql/data -l logfile start
...
postgres_1  | server started
postgres_1  | CREATE DATABASE
...
postgres_1  | PostgreSQL init process complete; ready for start up.
...
postgres_1  | 2022-01-23 17:32:03.824 UTC [1] LOG:  database system is ready to accept connections
...
app_1       | Your app is running on port 3000
app_1       | Unable to connect to the database: ConnectionError [SequelizeConnectionError]: getaddrinfo EAI_AGAIN database

【问题讨论】:

  • const sequelize = new Sequelize("postgres://user:pass@database:5432/codes"); postgres,而不是database

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


【解决方案1】:

你快到了。当您需要连接到 docker-compose 桥接网络上的另一个容器时,您可以使用服务名称作为主机名。

所以不是

const sequelize = new Sequelize("postgres://user:pass@database:5432/codes");

你需要

const sequelize = new Sequelize("postgres://user:pass@postgres:5432/codes");

【讨论】:

  • 工作,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 2019-07-10
  • 1970-01-01
  • 2020-11-27
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多