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

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

问题描述:

我设置了一个PostgreSQL容器,可以成功与Adminer连接,但是在尝试使用相同的凭据通过诸如DBeaver之类的连接时,出现了身份验证错误.

I have a PostgreSQL container set up that I can successfully connect to with Adminer but I'm getting an authentication error when trying to connect via something like DBeaver using the same credentials.

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

I have tried exposing port 5432 in the Dockerfile and can see on Windows for docker the port being correctly binded. I'm guessing that because it is an authentication error that the issue isn't that the server can not be seen but with the username or password?

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

Docker Compose file and Dockerfile look like this.

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证书和密钥)

Dockerfile: (Dockerfile will later be used to copy ssl certs and keys)

FROM postgres:9.6

EXPOSE 5432

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

Wondering if there is something else I should be doing to enable this to work via some other utility?

任何帮助都会很棒.

谢谢.

更新:

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

Tried accessing the database through the IP of the postgresql container 172.28.0.3 but the connection times out which suggests that PostgreSQL is correctly listening on 0.0.0.0:5432 and for some reason the user and password are not usable outside of Docker even from the host machine using localhost.

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

Check your pg_hba.conf file in the Postgres data folder. The default configuration is that you can only login from localhost (which I assume Adminer is doing) but not from external IPs.

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

In order to allow access from all external addresses vi password authentication, add the following line to your pg_hba.conf:

host    all             all            *            md5

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

Then you can connect to your postgres DB running in the docker container from outside, given you expose the Port (5432)