无法使用 docker-compose 通过 Sequelize 连接到 Postgres 数据库
Cannot connect to Postgres database with Sequelize using docker-compose
我无法验证我的 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
你快到了。当您需要连接到 docker-compose 桥接网络上的另一个容器时,您可以使用服务名称作为主机名。
所以不用
const sequelize = new Sequelize("postgres://user:pass@database:5432/codes");
你需要
const sequelize = new Sequelize("postgres://user:pass@postgres:5432/codes");
我无法验证我的 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
你快到了。当您需要连接到 docker-compose 桥接网络上的另一个容器时,您可以使用服务名称作为主机名。
所以不用
const sequelize = new Sequelize("postgres://user:pass@database:5432/codes");
你需要
const sequelize = new Sequelize("postgres://user:pass@postgres:5432/codes");