无法连接到 Docker Compose 中的 Postgres 数据库
Unable to connect to the Postgres database in Docker Compose
我正在构建一个 Node JS Web 应用程序。我正在为数据库使用 Postgres SQL 和 Sequelize。
我有 docker-compose.yaml 内容如下。
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-compose.yaml 范围内。我只是使用“nodemon server.js”启动它。我该如何解决?
您需要确保您的 Postgres 容器和您的节点在同一网络上。在它们驻留在公共网络中之后,您可以使用 docker 的 DNS 从节点应用程序解析数据库,在您的情况下,八个 postgres 或 test-db 作为主机名应该可以工作。有关 docker networks.
容器通信的更多信息
我正在构建一个 Node JS Web 应用程序。我正在为数据库使用 Postgres SQL 和 Sequelize。
我有 docker-compose.yaml 内容如下。
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-compose.yaml 范围内。我只是使用“nodemon server.js”启动它。我该如何解决?
您需要确保您的 Postgres 容器和您的节点在同一网络上。在它们驻留在公共网络中之后,您可以使用 docker 的 DNS 从节点应用程序解析数据库,在您的情况下,八个 postgres 或 test-db 作为主机名应该可以工作。有关 docker networks.
容器通信的更多信息