#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