连接到Postgres Docker服务器-身份验证失败

时间:2020-04-09 14:02:52

标签: postgresql docker

我设置了一个PostgreSQL容器,可以成功与Adminer连接,但是在尝试使用相同的凭据通过诸如DBeaver之类的东西进行连接时遇到验证错误。

我尝试在Dockerfile中公开端口5432,并且可以在Windows的Docker上看到端口已正确绑定。我猜是因为这是身份验证错误,所以问题不是不是服务器可见,而是用户名或密码?

Docker Compose文件和Dockerfile看起来像这样。

version: "3.7"

services:

  db:
    build: ./postgresql
    image: postgresql
    container_name: postgresql
    restart: always
    environment:
      - POSTGRES_DB=trac
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=1234
    ports:
      - 5432:5432

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

  nginx:
    build: ./nginx
    image: nginx_db
    container_name: nginx_db
    restart: always
    ports:
      - "8004:8004"
      - "8005:8005"

Dockerfile :(稍后将使用Dockerfile复制ssl证书和密钥)

FROM postgres:9.6

EXPOSE 5432

想知道我是否还应该做些其他事情,以使其能够通过其他实用程序来工作?

任何帮助都会很棒。

谢谢。

更新

试图通过postgresql容器172.28.0.3的IP访问数据库,但是连接超时,这表明PostgreSQL正确地侦听了0.0.0.0:5432,并且由于某些原因,用户和密码甚至在Docker之外也不可用。从主机使用本地主机。

2 个答案:

答案 0 :(得分:1)

检查Postgres数据文件夹中的pg_hba.conf文件。 默认配置是您只能从localhost(我假设管理员正在这样做)登录,而不能从外部IP登录。

为了允许通过密码验证从所有外部地址进行访问,请将以下行添加到pg_hba.conf中:

host    all             all            *            md5

然后,您只要暴露端口(5432),就可以从外部连接到在docker容器中运行的postgres数据库

答案 1 :(得分:0)

使用命令docker container inspect ${container_number},这将告诉您哪些IPaddress:端口暴露在容器外部。

命令“ docker container ls”将帮助识别“容器编号”