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) такова:
Надеюсь, это кому-нибудь поможет, мир.