我正在构建一个Node JS Web应用程序。我正在使用Postgres SQL和Sequelize数据库。
我有docker-compose。
version: '3.8'
services:
web:
container_name: web-server
build: .
ports:
- 4000:4000
restart: always
depends_on:
- postgres
postgres:
container_name: app-db
image: postgres:11-alpine
ports:
- '5431:5431'
environment:
- POSTGRES_USER=docker
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=babe_manager
volumes:
- ./postgres-data:/var/lib/postgresql/data
build:
context: .
dockerfile: ./pgconfig/Dockerfile
volumes:
app-db-data:
我正在使用以下凭据连接到数据库。
DB_DIALECT=postgres
DB_HOST=postgres
DB_NAME=babe_manager
DB_USERNAME=docker
DB_PORT=5431
DB_PASSWORD=secret
当应用程序试图连接到数据库时,我得到以下错误:
getaddrinfo ENOTFOUND postgres
我也试过用这个
DB_DIALECT=postgres
DB_HOST=localhost
DB_NAME=babe_manager
DB_USERNAME=docker
DB_PORT=5431
DB_PASSWORD=secret
这次我得到了以下错误:
connect ECONNREFUSED 127.0.0.1:5431
我的应用服务器不在docker- composer .yaml中。我只是使用"nodemon server.js"启动它。我该怎么修理它?
您需要确保您的Postgres容器和您的Node在同一个网络上。在它们驻留在公共网络中之后,您可以使用docker的DNS从Node应用程序解析数据库。在您的情况下,使用postgres或test-db作为主机名应该可以工作。更多关于docker网络上的容器通信。