将pgbouncer和postgres连接到与docker一起运行

时间:2019-12-20 09:53:22

标签: postgresql docker docker-compose pgbouncer

我目前尝试通过docker-compose连接到,但是pgbouncer无法连接到postgresql

我尝试在pgbouncer整个bash中连接到Postgresql

$ 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

postgres用户

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

1 个答案:

答案 0 :(得分:0)

我运行了您的docker-compose,尽管我的postgres由于某种原因退出了,但是pgbouncer似乎与postgres连接良好。 enter image description here

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