Jak uruchomić Django z bazą danych w kontenerze?

0

Witam serdecznie. Przerabiam właśnie tutorial z dockera z youtube. Po utworzeniu 2 następujących plików w projekcie:

Dockerfile:

  FROM python:3
  WORKDIR /code
  COPY var/docs/requirments.txt /code/
  RUN pip install -r requirments.txt
  COPY . /code/

docker-compose.yml

  version: "3.9"
  
  services:
    db:
      image: postgres
      environment:
        - POSTGRES_DB=youtube
        - POSTGRES_USER=youtube
        - POSTGRES_PASSWORD=youtube123
    web:
      build: .
      command: python manage.py runserver 0.0.0.0:8000
      volumes:
        - .:/code/
      ports:
        - "8000:8000"
      depends_on:
        - db

po uruchomieniu w konsoli:

docker-compose up

dostaje następujący błąd:

django.db.utils.OperationalError: unable to open database file

Zaznaczam, że nie utworzyłem tej bazy danych do której podane są parametry w docker-compose.yml - services bo na tutorialu nie tworzono tej bazy.

Wie ktoś dlaczego dostaje ten błąd?

1

Nie znam się na Django, ale po szybkim Google utwierdzam się w przekonaniu, że Django próbuje wbić na jakąś bazę SQLite3, a nie Postgres. Coś masz w kodzie pythonowym nie tak.

0

w django mam skonfigurowana baze sqlite3

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'endpoint/db.sqlite3',
    }
}

a w dockerze jeszcze raz konfiguruje na postgresql. Tylko, że tej bazy postgresql nie ma tak naprawde utworzonej bo na tutorialu jej nie tworzyli a dziala.

0
hubertsuder napisał(a):

w django mam skonfigurowana baze sqlite3

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'endpoint/db.sqlite3',
    }
}

a w dockerze jeszcze raz konfiguruje na postgresql.

a w dockerze jeszcze raz konfiguruje na postgresql - to jest nie prawda, nie konfigurujesz jej drugi raz. Jest tak jak mówił @dzek69, Django próbuje się łączyć do sqlite3, a nie do postgresa.

Tylko, że tej bazy postgresql nie ma tak naprawde utworzonej bo na tutorialu jej nie tworzyli a dziala.

To też jest nie prawda - baza jest, w serwisie db.

W momencie w którym wpiszesz

db:
      image: postgres
      environment:
        - POSTGRES_DB=youtube
        - POSTGRES_USER=youtube
        - POSTGRES_PASSWORD=youtube123

To docker compose Ci stworzy kontener o nazwie db z obrazu postgres, czyli bazę danych - z credentialami przekazanymi przez zmienne środowiskowe.

0

Zamiast localhost i port wrzucasz nazwę serwisu na którym jest obraz postgresa + jego port + bazę.
screenshot-20230409154354.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1