为什么docker拒绝连接到127.0.0.1:5432

时间:2019-10-09 18:47:01

标签: postgresql docker-compose sequelize.js

我的数据库URL设置为

DATABASE_URL = postgres:// DBUser:DBPass @ locahost:5432 / DatabaseName

我的docker文件如下

version: "3"
services:
  redis:
    image: redis:alpine
    container_name: redis
    ports:
      - "6379:6379"

  db_command:
    image: postgres:alpine
    container_name: pgDB
    environment:
      POSTGRES_USER: DBUser
      POSTGRES_PASSWORD: DBPass
      POSTGRES_DB: DatabaseName
    volumes:
      - "./.docker_pgdata:/var/lib/postgresql/data"  
    ports:  
      - "5432:5432"

当我尝试运行命令sequelize db:migrate时会引发错误

我可以通过命令行连接到postgres docker实例,这不是问题。

ERROR: connect ECONNREFUSED 127.0.0.1:5432 我不了解将主机从127.0.0.1更改为localhost无效。另外,它以前运行过,现在却不起作用,这令我感到困惑。

我去检查了解决方案,但是没有一个对我有用。

2 个答案:

答案 0 :(得分:0)

如果要从容器A访问容器B,则不能使用localhost,因为容器B不在容器A内部运行。它在容器网络中。

尝试使用depends_on指定容器依赖项:

services:
  redis:
    ...<existing config>
    depends_on:
      - pgDB

然后redis容器可以访问数据库容器。使用容器B 0.0.0.0:5432的地址进行连接。

更好的是,只需使用您要访问的容器的名称(pgDB

侧面说明:最佳做法是不要更改容器名称。只要允许他们使用他们的服务名称即可。

答案 1 :(得分:0)

  

当我尝试运行命令sequelize db:migrate时会引发错误

您从哪里尝试运行命令? redis容器?您当地的人?

如果来自redis容器,则可以使用服务名称:db_command

网址:DATABASE_URL = postgres:// DBUser:DBPass @ db_command:5432 / DatabaseName