"База данных 'docker-db' не существует".
Итак, у меня проблема с созданием приложения django/postgre с помощью docker. Оно продолжает говорить "база данных не существует" и довольно много времени гугления не приносит никаких результатов. Я уже удалял тома и пересобирал свое приложение несколько раз, следовал различным руководствам о том, как люди делают postgres, но все еще не повезло заставить его работать для меня. Dockerfile
FROM python:3.9.6-alpine
WORKDIR /blog-master
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install psycopg2 dependencies
RUN apk update \
&& apk add postgresql-dev gcc python3-dev musl-dev
RUN pip install --upgrade pip
RUN apk update \
&& apk add postgresql-dev gcc python3-dev musl-dev
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
compose.yml
services:
back:
image: python:3.9
build: ./blog-master
command: sh -c "python manage.py runserver 0.0.0.0:8000 &&
/usr/local/bin/gunicorn blog.wsgi:application -w 2 -b :8000"
expose:
- "8000"
volumes:
- blog-master-django:/usr/src/app
- blog-master-static:/usr/src/app/static
env_file: .env
depends_on:
db:
condition: service_healthy
db:
image: postgres:14
restart: always
expose:
- "5432"
environment:
- POSTGRES_DB=docker_dev
- POSTGRES_USER=docker
- POSTGRES_PASSWORD=docker
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data/
healthcheck:
test: ["CMD-SHELL", "pg_isready -U docker"]
interval: 5s
timeout: 5s
retries: 5
volumes:
blog-master-django:
blog-master-static:
pgdata:
.env
DEBUG=1
SECRET_KEY='**key-here**'
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=docker_db
SQL_USER=docker
SQL_PASSWORD=docker
SQL_HOST=db
SQL_PORT=5432
Итак, ответ был довольно прост и довольно "я не знаю, что это было". Во-первых, я забыл добавить DATABASE=postgres
в мой .env файл, что было очень важно для того, чтобы Django заметил нужный db. Проблема с поиском db для не запрашиваемой db? Я просто переименовал нужный db в "docker", который искал мой db сервис, и все заработало.