连接运行在Docker中的pgbouncer和Postgres数据库

7

我最近尝试使用docker-compose连接到,但是pgbouncer无法连接到postgresql

我尝试通过Postgresql bash连接到pgbouncer

$ sudo docker-compose ps 

        Name                      Command               State           Ports         
--------------------------------------------------------------------------------------
postgres_pgbouncer_1   /opt/pgbouncer/entrypoint.sh     Up      0.0.0.0:6432->6432/tcp
postgres_postgres_1    docker-entrypoint.sh postg ...   Up      0.0.0.0:5432->5432/tcp

$ sudo docker-compose exec postgres bash 
& psql -h pgbouncer -p 6432 -U postgre
psql: ERROR:  no such user: postgres

我在 pgbouncer 的日志中看到了这个警告:

$ sudo docker-compose logs -f pgbouncer

2019-12-20 08:11:31.802 UTC [1] WARNING C-0x5591f3329fb0: (nodb)/(nouser)@192.168.96.2:40270 pooler error: no such user: postgres

docker-compose.yml

version: '3.4'

networks:
  pushe-set: null

volumes:
  postgres-data: null


services:
  postgres:
    networks:
      - pushe-set
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./data/postgresql/scripts:/docker-entrypoint-initdb.d:ro
      - ./data/postgresql/config:/etc/postgresql:ro
    dns:
      - 8.8.8.8
      - 4.2.2.4
    restart: always
    image: postgres
    env_file:
      - env/postgresql.env
    ports:
      - 5432:5432
    command:
      - "postgres"
      - "-c"
      - "config_file=/etc/postgresql/postgresql.conf"

  pgbouncer:
    depends_on:
      - postgres
    networks:
      - pushe-set
    #volumes:
      #- ./data/pgbouncer/userlist.txt:/etc/pgbouncer/userlist.txt:ro
    dns:
      - 8.8.8.8
      - 4.2.2.4
    restart: always
    image: pgbouncer/pgbouncer
    env_file:
      - env/pgbouncer.env
    ports:
      - 6432:6432

pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             0.0.0.0/0               md5
# 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

PostgreSQL用户

root:/# psql -V
psql (PostgreSQL) 11.4 (Debian 11.4-1.pgdg90+1)

root:/# psql -U postgres
Password for user postgres: 
psql (11.4 (Debian 11.4-1.pgdg90+1))
Type "help" for help.

postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
(3 rows)

postgres=# 

postgresql.evn

POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=postgres
PGDATA=/var/lib/postgresql/data

pgbouncer.ini

#pgbouncer.ini

[databases]
* = host = postgres port=5432 user=postgres password=postgres dbname=postgres

[pgbouncer]
listen_addr = 0.0.0.0
listen_port = 6432
auth_type = md5
max_client_conn = 400
default_pool_size = 20
min_pool_size = 10
reserve_pool_size = 10
max_db_connections = 50
max_user_connections = 50
ignore_startup_parameters = extra_float_digits

# Log settings
log_connections = 0
log_disconnections = 0
admin_users = postgres

pgbouncer.env

DATABASES_HOST=postgres
DATABASES_PORT=5432
DATABASES_USER=postgres
DATABASES_PASSWORD=postgres
DATABASES_DBNAME=postgres

PGBOUNCER_LISTEN_ADDE=*
PGBOUNCER_LISTEN_PORT=6432

PGBOUNCER_MAX_CLIENT_CONN=400
PGBOUNCER_DEFAULT_POOL_SIZE=20

PGBOUNCER_MIN_POOL_SIZE=10
PGBOUNCER_RESERVE_POOL_SIZE=10
PGBOUNCER_MAX_DB_CONNECTIONS=50
PGBOUNCER_MAX_USER_CONNECTIONS=50
PGBOUNCER_LOG_CONNECTIONS=0
PGBOUNCER_LOG_DISCONNECTIONS=0
PGBOUNCER_ADMIN_USERS=postgres
PGBOUNCER_AUTH_TYPE=md5

图片: postgresqlpgbouncer


更新

docker-compose up -d 
docker-compose logs -f postgres

postgres_1   | 
postgres_1   | Data page checksums are disabled.
postgres_1   | 
postgres_1   | fixing permissions on existing directory /var/lib/postgresql/data ... ok
postgres_1   | creating subdirectories ... ok
postgres_1   | selecting default max_connections ... 100
postgres_1   | selecting default shared_buffers ... 128MB
postgres_1   | selecting default timezone ... Etc/UTC
postgres_1   | selecting dynamic shared memory implementation ... posix
postgres_1   | creating configuration files ... ok
postgres_1   | running bootstrap script ... ok
postgres_1   | performing post-bootstrap initialization ... ok
postgres_1   | syncing data to disk ... ok
postgres_1   | 
postgres_1   | Success. You can now start the database server using:
postgres_1   | 
postgres_1   |     pg_ctl -D /var/lib/postgresql/data -l logfile start
postgres_1   | 
postgres_1   | 
postgres_1   | WARNING: enabling "trust" authentication for local connections
postgres_1   | You can change this by editing pg_hba.conf or using the option -A, or
postgres_1   | --auth-local and --auth-host, the next time you run initdb.
postgres_1   | waiting for server to start....2019-12-20 10:47:39.557 UTC [42] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1   | 2019-12-20 10:47:39.606 UTC [43] LOG:  database system was shut down at 2019-12-20 10:47:39 UTC
postgres_1   | 2019-12-20 10:47:39.631 UTC [42] LOG:  database system is ready to accept connections
postgres_1   |  done
postgres_1   | server started
postgres_1   | 
postgres_1   | /usr/local/bin/docker-entrypoint.sh: sourcing /docker-entrypoint-initdb.d/init.sh
postgres_1   | /usr/local/bin/docker-entrypoint.sh: line 155: /docker-entrypoint-initdb.d/init.sh: Permission denied
postgres_1   | 2019-12-20 10:47:40.769 UTC [1] LOG:  listening on IPv4 address "127.0.0.1", port 5432
postgres_1   | 2019-12-20 10:47:40.769 UTC [1] LOG:  could not bind IPv6 address "::1": Cannot assign requested address
postgres_1   | 2019-12-20 10:47:40.769 UTC [1] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
postgres_1   | 2019-12-20 10:47:40.776 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1   | 2019-12-20 10:47:40.848 UTC [24] LOG:  database system was interrupted; last known up at 2019-12-20 10:47:39 UTC
postgres_1   | 2019-12-20 10:47:40.885 UTC [24] LOG:  database system was not properly shut down; automatic recovery in progress
postgres_1   | 2019-12-20 10:47:40.889 UTC [24] LOG:  invalid record length at 0/1650E98: wanted 24, got 0
postgres_1   | 2019-12-20 10:47:40.889 UTC [24] LOG:  redo is not required
postgres_1   | 2019-12-20 10:47:40.933 UTC [1] LOG:  database system is ready to accept connections

感谢您的回复,我自定义了PostgreSQL配置。因此,如果您忽略“docker-compose.yml”中的“volumes”和“commands”,并创建“postgresql.env”和“pgbouncer.env”,则可以通过运行此命令“docker-compose up -d”重新创建该情况。 - Phoenix
你应该通过Postgres终端(docker-compose exec postgres bash)并尝试向“pgbouncer”发送请求。 - Phoenix
psql -h pgbouncer -p 6432 -U postgre - Phoenix
你能否发布一张 docker-compose up 输出的图片? - corvo
docker-compose up 将以附加模式运行,并显示正在发生的所有日志。即使 Docker 文件相同,我的 postgres 表现也与您的不同。 - corvo
显示剩余4条评论
1个回答

3
我运行了你的docker-compose,尽管我的postgres由于某些原因退出了,但pgbouncer似乎与postgres连接良好。 在此输入图片描述

Can you please run <code>docker-compose up --build</code> and post that image too....


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接