postgresql - 从主机连接到PSQL dockerized数据库

标签 postgresql docker docker-compose

我在Docker容器中配置PostgreSQL数据库时遇到了一些麻烦。我的主要问题是我想直接从主机访问它。
我的容器配置如下所示:

version: '3'

services:
  db:
    image: postgres:10.4
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
      - ./var/docker/db/pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf

volumes:
  pgdata:
我的pg_hba.conf文件是默认文件,其中增加了两行:
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust

# IPv4 local connections:

########### LINE ADDED ###########
host    all             all             0.0.0.0/0               md5

host    all             all             127.0.0.1/32            trust

# IPv6 local connections:

########### LINE ADDED ###########
host    all             all             ::/0                    md5

host    all             all             ::1/128                 trust

# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
当我尝试连接到我的容器时,遇到以下错误:
psql --host=127.0.0.1

psql: could not connect to server: Connection refused
    Is the server running on host "127.0.0.1" and accepting
    TCP/IP connections on port 5432?
我首先检查端口是否在我的Docker容器上正确重定向:
docker ps

IMAGE               COMMAND                         STATUS              PORTS                    NAMES
postgres:10.4       "docker-entrypoint.s…"          Up 6 seconds        0.0.0.0:5432->5432/tcp   db_1
然后,我检查PSQL是否正确运行,在容器中执行以下操作:
netstat -tlnp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.11:42293        0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::5432                 :::*                    LISTEN      -                   
据我了解:
  • Server侦听所有主机在端口5432上发出的所有请求。
  • 容器将主机端口5432上的所有流量转发到容器端口5432
  • PSQL询问所有非本地主机的密码(我在pg_hba.conf中添加的两行)

  • 我想念什么?我还可以检查其他东西来调试问题吗?

    最佳答案

    好吧,这是令人尴尬的开发时刻之一……在与@toydarian进行了进一步调查(非常感谢您的时间!)之后,我终于注意到这是由于我在很久以前设置的别名了:

    alias psql="docker run -ti --rm postgres:10.4 psql"


    它解释了为什么它不起作用。让我们看看光明的一面:我已经学到了很多有关PSQL配置的知识! :)

    关于postgresql - 从主机连接到PSQL dockerized数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64351132/

    相关文章:

    Azure - 容器未响应端口 : , 上的 HTTP ping,站点启动失败

    php - Docker-compose Nginx php-fpm 文件未找到

    docker-compose - 通过 docker-compose 发送参数不适用于 .NET6 中的 appsettings

    postgresql - 在 docker-compose 中的容器入口点之后运行脚本

    sql - 删除SQL中的相似列

    asp.net - Mac OS X Docker基准ASP.NET错误:找不到libdl

    sql - 使用generate_series选择过去18个月的总和和运行余额

    docker - Kubernetes/Rancher中的Docker网络

    postgresql - sails.js -postgresql 为 bigint 字段返回字符串值而不是整数

    mysql - 将 MySQL 迁移到 PostgreSql 并共享表