Ошибка asyncpg.исключения.InvalidPasswordError: не удалось выполнить проверку подлинности пароля для пользователя «steamtrader_pguser»

#python #docker #docker-compose

Вопрос:

Я пытаюсь запустить Telegram-бота на Aiogram Python с базой данных PostgreSQL на сервере Ubuntu 20.04 в Докере, используя docker-compose. Сценарий запускается, но я получаю

 asyncpg.exceptions.InvalidPasswordError: password authentication failed for user "steamtrader_pguser"
 

Вот мой файл docker-compose.yml:

 version: "3.1"

services:
  steamtraderpurchases_db:
    container_name: steamtraderpurchases_db
    image: sameersbn/postgresql:10-2
    environment:
      PG_PASSWORD: $PGPASSWORD
    restart: always
    ports:
      - 5432:5432
    networks:
      - steamtraderpurchases_botnet
    volumes:
      - ./pgdata:/var/lib/postgresql

  steamtraderpurchases_bot:
    container_name: steamtraderpurchases
    build:
      context: .
    command: python app.py
    restart: always
    networks:
      - steamtraderpurchases_botnet
    env_file:
      - ".env"
    volumes:
      - .:/src
    depends_on:
      - steamtraderpurchases_db
    ports:
      - 8443:3001


networks:
  steamtraderpurchases_botnet:
    driver: bridge
 

Вот файл Dockerfile:

 FROM python:3.9.5

WORKDIR /src
COPY requirements.txt /src
RUN pip install -r requirements.txt
COPY . /src
 

В файле .env я указал:

 DATABASE=steamtrader
PGUSER=steamtrader_pguser
PGPASSWORD=password
DB_HOST=steamtraderpurchases_db
IP=*ip of my server*
 

Остальная часть кода-это телеграмм-бот. Кроме того, я создаю базу данных с необходимыми полями, используя SQLAlchemy и Gino. Это моя первая попытка запустить бота на сервере, поэтому я буду очень благодарен вам за помощь!

UPD: Я нашел эти строки в журналах при запуске docker-compose:

 FATAL: password authentication failed for user "steamtrader_pguser"
DETAIL:  Role "steamtrader_pguser" does not exist.
 

Я пытался создать роль, но ничего не получалось

Ответ №1:

Пожалуйста, посмотрите sameersbn/postgresql документ:

По умолчанию пользователю postgres не присваивается пароль, и в результате вы можете войти на сервер PostgreSQL только локально. Если вы хотите удаленно войти на сервер PostgreSQL в качестве пользователя postgres, вам нужно будет назначить пароль для пользователя, используя переменную PG_PASSWORD.

Выше означает , что соответствующий пользователь PG_PASSWORD является postgres , а не steamtrader_pguser . Чтобы добавить нового пользователя steamtrader_pguser , вам нужно будет выполнить следующие действия:

Новый пользователь базы данных PostgreSQL может быть создан путем указания переменных DB_USER и DB_PASS при запуске контейнера.

 docker run --name postgresql -itd --restart always 
 --env 'DB_USER=dbuser' --env 'DB_PASS=dbuserpass' 
 sameersbn/postgresql:12-20200524
 

Вышесказанное означает, что вам нужно установить DB_USER и DB_PASS в docker-compose.yaml environment разделе «s».

Комментарии:

1. спасибо, это помогло, но также необходимо добавить DB_NAME поле. В моем случае это равно $DATABASE