postgresql - Postgres Docker - 无法从远程服务器连接

标签 postgresql docker psql

我正在使用 postgres:9.5.3 docker 镜像。我正在启动容器,然后尝试从远程主机连接到 psql 数据库,但每次都失败并出现错误:

psql: could not connect to server: Connection refused
Is the server running on host "172.18.0.2" and accepting
TCP/IP connections on port 5432?

在我的 docker-compose 文件中,我正在安装 pg_hba.conf。这是我的 docker-compose 文件:

services:
    db:
      networks:
        - test
      image: postgres:9.5.3
      expose:
        - 5432
      volumes:
        - ./pgdata/:/var/lib/postgresql/data
        - ./pg_hba.conf/:/var/lib/postgresql/data/pg_hba.conf

我已经根据说明修改了 pg_hba.conf 文件以接受来自所有主机的远程连接 here .我的pg_hba.conf如下:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             0.0.0.0/0               trust
# IPv6 local connections:
host    all             all             ::0/0                   trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                trust
#host    replication     postgres        127.0.0.1/32            trust
#host    replication     postgres        ::1/128                 trust

host all all 0.0.0.0/0 md5

我的 postgresql.conf 也有以下行:listen_addresses = '*'

当我尝试从运行容器的主机连接到数据库时,它连接成功。但是,当我尝试使用命令 psql -h 172.18.0.2 -U postgres -d postgres -p 5432 从任何远程计算机进行连接时,它会给我一个连接错误,这意味着远程连接无法正常工作。通过所有这些设置,我希望它能够连接。我在这里缺少什么?

最佳答案

看起来您实际上并没有发布公开的端口。

代替:

expose:
  - 5432

使用:

ports:
 - "5432:5432"

公开文档:

Expose ports without publishing them to the host machine - they’ll only be accessible to linked services. Only the internal port can be specified.

关于postgresql - Postgres Docker - 无法从远程服务器连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38881282/

相关文章:

sql - 在 PostgreSQL 中选择或 bool 聚合函数

c# - 新 Visual Studio 2019 中的环境变量为空,但 Visual Studio 2017 中没有

node.js - psql 查询没有返回正确的结果?

postgresql - 使用新名称克隆 postgres 数据库

sql - 获取值大于平均借入率的日期

node.js - 查询发送错误 : read ECONNRESET 的 Sequelize 错误

docker - 从travis部署到Digital Ocean Droplet

MAC中的Docker网络

postgresql - 无法在postgresql中访问 super 用户

sql - PSQL 按顺序选择 a 或 b,但如果 a 和 b 都存在,则不选择 a 和 b