无法在 docker-compose 中使用 Postgres DB - ECONNREFUSED
Posted
技术标签:
【中文标题】无法在 docker-compose 中使用 Postgres DB - ECONNREFUSED【英文标题】:Unable to use Postgres DB in docker-compose - ECONNREFUSED 【发布时间】:2018-11-21 16:53:55 【问题描述】:我有一个 Node.js 应用程序并设置了 docker-compose。我正在尝试在容器中使用 Postgres DB。
这里是 docker-compose
version: "3"
services:
web:
build: .
ports:
- "3000:3000"
links:
- redis
- db
angular: # image of nginx
image: "qp-angular-nginx"
ports:
- "4200:80" # specify port forewarding
redis:
image: "redis:3"
ports:
- "6379:6379"
db:
image: "postgres:9.6"
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
- pgdata:/var/lib/postgresql/data
dbadmin:
image: "myimage/phppgadmin"
ports:
- "8085:80"
environment:
POSTGRES_HOST: db
POSTGRES_PORT: 5432
volumes:
pgdata:
我已经成功运行容器,甚至连接了数据库,但是在发出数据库请求时出现此错误
"stack":
"code": "ECONNREFUSED",
"errno": "ECONNREFUSED",
"syscall": "connect",
"address": "127.0.0.1",
"port": 5432
【问题讨论】:
在尝试连接之前,可能值得尝试使用wait-for-it
或类似的帮助程序以确保数据库可用:docs.docker.com/compose/startup-order
【参考方案1】:
对于这些,您可以使用具有如下配置文件的更新的结构项目:
require('dotenv').config();
module.exports =
development:
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.APP_URL_DOCKER,
dialect: 'postgres'
,
test:
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.APP_URL_DOCKER,
dialect: 'postgres'
,
production:
username: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.APP_URL_DOCKER,
dialect: 'postgres'
;
您可以在.env
文件中指定postgres database
的服务名称。它应该对你有好处。
// .env file
APP_URL_LOCAL=127.0.0.1
APP_URL_DOCKER=db # database service name
APP_PORT=8000
APP_KEY=6dd63668dab9a309c7c59a2982126a43b064816925a40b9680d16e2665f41b676a87dae4d506712e6332479c82827993059ddefb607b65caa3534b66b20253ed
DB_USER=postgres
DB_PASSWORD=db_password
DB_NAME=db_name
DB_PORT_CONTAINER=5432
DB_PORT_LOCAL=5433
【讨论】:
【参考方案2】:如果您从另一个 docker 容器连接到数据库,请在连接字符串中使用服务名称(在您的情况下为db
)。从错误消息来看,您的配置似乎有问题。它尝试连接到 localhost (127.0.0.1
)
【讨论】:
我已将主机设置为db
,这是我的 docker-compose 文件中的服务名称以上是关于无法在 docker-compose 中使用 Postgres DB - ECONNREFUSED的主要内容,如果未能解决你的问题,请参考以下文章
无法在 docker-compose 中使用 Postgres DB - ECONNREFUSED
django 无法在 docker-compose 中连接 mysql
无法在 Docker-Compose 中使用 Spring Boot 连接到 MongoDB
使用 docker-compose 无法在同一网络中连接 mysql 和 spring boot