Запуск PostgreSQL в Docker, но не удается подключиться с переменными среды для имени пользователя и пароля?

Вопросы и ответы

Я не могу разобраться с этим, я пытаюсь подключиться к экземпляру postgres, работающему в docker. В переменных окружения я выбрал

postgres:
    image: postgres:latest
    container_name: postgres
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: voting
    healthcheck:
      test: [ "CMD", "pg_isready", "-U", "postgres" ]
      interval: 10s
      timeout: 5s
      retries: 5

Я понимаю это так, что здесь я выбираю суперпользователя, под которым работает postgres, которым должен быть postgres как для имени пользователя, так и для пароля.

Теперь, когда я пытаюсь подключиться с помощью sqlalchemy

engine = create_tables_for_voting.create_tables("postgresql+psycopg2://postgres:postgres@localhost:5432/voting")

Session = sessionmaker(bind=engine)
session = Session()

Это должно идеально работать, но сообщения об ошибках, которые я получаю в терминале, следующие

Произошла ошибка при подключении к БД: (psycopg2.OperationalError) не удалось подключиться к серверу на "localhost" (::1), порт 5432: FATAL: ошибка аутентификации пароля для пользователя "username"

Теперь, когда я делаю запрос через docker, нет пользователя с именем username

введите описание изображения здесь

Действительно запутался здесь, и думаю, что это что-то простое, что я упускаю из виду

Я пробовал изменить пользователя и также пытался проверить разных пользователей, но ничего не сработало

Нет других реализованных пользователей

Ответ

Проблема, с которой вы столкнулись при подключении к экземпляру PostgreSQL, работающему в Docker, может быть связана с несколькими факторами. Давайте рассмотрим шаги, которые помогут вам разобраться и решить эту проблему.

Проверка конфигурации контейнера

  1. Проверьте настройки Docker Compose:
    Убедитесь, что ваш docker-compose.yml правильно сконфигурирован. Ваш код выглядит корректно, но для полноты картины давайте убедимся, что он правильно находится в файле. Вот ваш пример:

    version: '3.8'
    services:
     postgres:
       image: postgres:latest
       container_name: postgres
       ports:
         - "5432:5432"
       environment:
         POSTGRES_USER: postgres
         POSTGRES_PASSWORD: postgres
         POSTGRES_DB: voting
       healthcheck:
         test: [ "CMD", "pg_isready", "-U", "postgres" ]
         interval: 10s
         timeout: 5s
         retries: 5
  2. Создание и запуск контейнеров:
    Убедитесь, что контейнер запущен. Находясь в директории с вашим docker-compose.yml, выполните команду:

    docker-compose up -d

    Затем проверьте статус контейнера:

    docker ps

Параметры подключения

  1. Проверьте строку подключения:
    Убедитесь, что строка подключения, которую вы используете в SQLAlchemy, соответствует вашим настройкам. Ваша строка подключения:

    engine = create_tables_for_voting.create_tables("postgresql+psycopg2://postgres:postgres@localhost:5432/voting")

    Если вы запускаете свою программу локально и контейнер PostgreSQL также работает на локальной машине, то localhost подходит. Однако убедитесь, что в вашем коде не происходит попытки подключения к неправильному username.

  2. Проверка переменной окружения:
    Ошибка password authentication failed for user "username" указывает на то, что вместо ‘postgres’ используется неверное имя пользователя. Убедитесь, что вы используете правильного пользователя для подключения. Иногда могут быть опечатки или кэшированные соединения.

Дополнительные проверки

  1. Проверка доступных пользователей:
    Для проверки текущих пользователей вы можете подключиться к контейнеру и открыть psql:

    docker exec -it postgres psql -U postgres

    A затем выполните следующее SQL-запрос для проверки пользователей:

    \du

    Убедитесь, что пользователь postgres действительно существует.

  2. Проверка логов контейнера:
    Вы также можете просмотреть логи контейнера PostgreSQL, чтобы получить дополнительную информацию об ошибках:

    docker logs postgres

Заключение

Если после всех вышеперечисленных проверок проблема не исчезла, возможно, вам стоит рассмотреть возможность перезапуска контейнера или даже пересоздания образа:

docker-compose down
docker-compose up -d

Этот процесс обеспечит очистку всех предыдущих настроек и создаст новую среду для вашего PostgreSQL. Убедитесь, что при этом все важные данные сохраняются, если они существуют.

Если у вас возникли дополнительные вопросы, не стесняйтесь их задавать!

Оцените материал
Добавить комментарий

Капча загружается...