Django (createsuperuser) Ошибка: Это имя пользователя уже занято

Я разрабатываю Django приложение с Docker & PostgreSQL. Я использовал те же настройки, которые я опубликую ниже, и все работало хорошо, но после того, как я выключил и запустил снова (после удаления томов из Docker и удаления pycache из папки) с:

docker-compose down 
docker-compose up --remove-orphans

Когда я пытаюсь создать admin (тот же пользователь последней сессии), он говорит мне: Error: That username is already taken. Но, когда я пытаюсь найти пользователя в PgAdmin (localhost:5050), пользователь не существует, и когда я пытаюсь войти на сайт (localhost:8000), он поднимает Please enter a correct username and password. Note that both fields may be case-sensitive.

Dockerfile:

FROM python:3.7-slim as production

ENV PYTHONUNBEFFERED=1
WORKDIR /app/

RUN apt-get update && \
    apt-get install -y \
    bash \
    build-essential \
    gcc \
    libffi-dev \
    musl-dev \
    openssl \
    postgresql \
    libpq-dev

COPY requirements/prod.txt ./requirements/prod.txt
RUN pip install -r ./requirements/prod.txt

COPY manage.py ./manage.py
COPY website ./website

EXPOSE 8000

FROM production as development

COPY requirements/dev.txt ./requirements/dev.txt
RUN pip install -r ./requirements/dev.txt

COPY . .

docker-compose.yml

version: "3.7"

x-service-volumes: &service-volumes
  - ./:/app/:rw,cached

x-database-variables: &database-variables
  POSTGRES_DB: postgres
  POSTGRES_USER: postgres
  POSTGRES_PASSWORD: postgres

x-app-variables: &app-variables
  <<: *database-variables
  POSTGRES_HOST: postgres

services:
  website:
    image: "django_image:latest"
    command: python manage.py runserver 0.0.0.0:8000
    volumes: *service-volumes
    environment: *app-variables
    depends_on:
      - db_migrate
    ports:
      - "8000:8000"

  db_migrate:
    image: "django_image:latest"
    command: python manage.py migrate
    volumes: *service-volumes
    environment: *app-variables
    depends_on:
      - postgres

  postgres:
    image: postgres:latest
    ports:
      - "5432:5432"
    environment: *database-variables
    volumes:
      - postgres:/data/postgres

  pgadmin:
    container_name: pgadmin_container
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-admin@admin.com}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
      PGADMIN_CONFIG_SERVER_MODE: "False"
    volumes:
      - pgadmin:/var/lib/pgadmin
    ports:
      - "${PGADMIN_PORT:-5050}:80"
    restart: unless-stopped

volumes:
  postgres:
  pgadmin:

Базы данных в website/settings.py

DATABASES = {
    'default': {
        'ENGINE': "django.db.backends.postgresql",
        'NAME': "postgres",
        'USER': "postgres",
        'PASSWORD': "postgres",
        'HOST': os.getenv('POSTGRES_HOST'),
        'PORT': 5432
    },
}

Мне кажется, что команда python manage.py createsuperuser почему-то обращается к прошлым пользователям, которых я создал в прошлой сессии, а не к тем, что находятся внутри новой базы данных postgres.

Ок, проблема была в том, что я запускал общую команду manage.py createsuperuser. Я не знаю как, но команда выполнялась и добавляла на моей локальной postgres бд. Поэтому после попытки добавить что-то оно уже находилось внутри локальной postgres db. Но, конечно, и PgAdmin, и Django-App не могли прочитать это. Поэтому правильной командой для запуска была docker-compose run --rm website python manage.py createsuperuser, и она будет правильно добавлять в правильную postgres db.

Кроме того, структура моего проекта (от которого зависит команда docker-compose) такова:

enter image description here

Надеюсь, это кому-нибудь поможет, мир.

Вернуться на верх