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

5vf7fwbs  于 2024-01-06  发布在  Docker
关注(0)|答案(4)|浏览(156)

我有一个PostgreSQL容器设置,我可以成功地连接到与管理员,但我得到一个身份验证错误时,试图通过类似DBeaver使用相同的凭据连接。
我已经尝试在Dockerfile中暴露端口5432,并且可以在Windows for 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之外无法使用,即使从使用localhost的主机也是如此。

xzlaal3s

xzlaal3s1#

检查Postgres数据文件夹中的pg_hba.conf文件。默认配置是只能从本地主机登录(我假设Adminer正在这样做),而不能从外部IP登录。
为了允许通过密码验证从所有外部地址进行访问,请将以下行添加到pg_hba.conf:

host    all             all            *            md5

字符串
然后,您可以从外部连接到在docker容器中运行的postgres DB,只要您公开端口(5432)

lrl1mhuk

lrl1mhuk2#

使用命令docker container inspect ${container_number},这将告诉您哪些IP地址:端口暴露在容器外部。
命令'docker container ls'将帮助识别'container number'

pvcm50d1

pvcm50d13#

在更新了我的默认db_name之后,我还必须像OP那样显式地公开端口,从而更新docker-compose

db:
    image: postgres:13-alpine
    volumes:
      - dev-db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=devdb
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=1234
    ports:
      - 5432:5432

字符串
但是这里的关键是重新启动服务器!DBeaver已经连接到localhost:5432:)

nkkqxpd9

nkkqxpd94#

1.在docker compose中将Volume挂载添加到本地文件库

volumes:
  - ~/tmp/data:/var/lib/postgresql/data

字符串
1.在~/tmp/data/pg_hba.conf中编辑文件,将数据IP设置为127.0.0.1/32,只需使用0.0.0.0/32即可。

相关问题