我将Sequelize ORM与PostgreSQL方言托管在本地主机上运行的docker容器中。该应用程序通过端口3050运行,并且数据库通过端口5432重定向到4321。
错误:
Server is running on port: 3050
Unable to connect to the database: SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:4321
docker-compose.yml
version: "3"
services:
app:
build: .
command: yarn start
ports:
- "3050:3050"
depends_on:
- postgres
volumes:
- .:/home/app/medtech
- /home/app/medtech/node_modules
postgres:
image: postgres:alpine
ports:
- "4321:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_DB: medtech_dev
POSTGRES_PASSWORD: uaz0ZWrsCeUG3271GsRB
我的数据库连接代码段
import Sequelize from 'sequelize';
import Constants from '../utils/constants';
const sequelize = new Sequelize(
Constants.database.name,
Constants.database.user,
Constants.database.password, {
host: Constants.database.host,
port: Constants.database.port,
dialect: 'postgres',
pool: {
max: 10,
min: 0,
acquire: 10000,
idle: 20000,
},
timezone: Constants.timezone,
},
);
常量值来自我的.env:
DATABASE_PORT=4321
DATABASE_HOST=localhost
DATABASE_NAME=medtech_dev
DATABASE_USER=postgres
DATABASE_PASSWORD=uaz0ZWrsCeUG3271GsRB
由于某种原因,我不知道。我正在使用一个单独的文件来使用完全相同的数据库常量来运行我的种子和迁移,并且可以正常工作。这是
const Constants = require('../utils/constants').default;
module.exports = {
username: Constants.database.user,
port: Constants.database.port,
password: Constants.database.password,
database: Constants.database.name,
host: Constants.database.host,
dialect: 'postgres',
};
在我通过文件和许多线程进行了许多更改之后,我阅读了我不认为是什么导致了该问题。这是我第一次使用Docker,我不知道我的Docker配置文件是否真的有问题或其他错误。
感谢您的帮助。
答案 0 :(得分:2)
您的应用程序容器和postgres在两个不同的容器中运行,这意味着它们是两台不同的机器,每台机器都有自己的IP。
您不能使用localhost:postgresport
来从应用容器中调用postgres服务,反之亦然,从postgres到应用容器
Constants.database.host
似乎是localhost或172.0.0.1,要到达postgres容器,您必须调用容器ip或名称或服务名称
在您的情况下,将Constants.database.host
的值更改为postgres
,然后尝试一下