Wklepuje komende sudo docker build .
wszytko przechodzi. Potem biore numer contenera ktory został zbudowany i wpisuje sudo docker run #id-contneera
i wyskakuje mi blad django.db.utils.OperationalError: unable to open database file
. A moj docker-compose.yml
wyglada nastepujaco:
version: "3.9"
services:
your-container:
volumes:
- db.sqlite3:/db.sqlite3 # dostosuj ścieżkę dla kontenera
volumes:
volumes:
database:
nie wiem może coś źle robie...
Kolega ci kazał zmapować wolumen, ale nazwał wolumen tak samo jak ścieżkę w kontenerze i się pogubiłeś, więc pokażę ci składnię na innym przykładzie:
version: 3.9
services:
your-container:
volume:
- your-volume:/path/in/container
volumes:
your-volume:
To sprawi, że wolumen o nazwie your-volume
będzie widoczny w kontenerze pod ścieżką /path/in/container
. To jest ścieżka do folderu, a nie do pliku.
To oznacza, że dostaniesz tam pusty katalog i musisz sobie tam stworzyć lub skopiować swój plik do SQLite, jeśli twoja aplikacja tego nie robi sama.
Natomiast dołączam się do sugestii, abyś użył Postgresa.
Przykładowo tak:
version: 3.9
services:
app:
# tu to co masz dla tej twojej appki
depends_on:
- db
db:
image: 'postgres:16.1-alpine'
container_name: db
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Ważne dla ciebie jest to, że:
- Możesz do kontenera przekazać stałe dane w zmiennych środowiskowych w sekcji
environment
. Ustawiasz w ten sposób użytkownika i hasło do Postgresa, ale również mógłbyś np. przekazać adres i port postgresa do swojej apki
- Kontenery uruchomione z jednego pliku
docker-compose.yml
są w jednej dockerowej sieci i "widzą" siebie nawzajem po swojej nazwie. Tak więc jeśli nazwiesz postgresa db
w docker-compose'ie, to w aplikacji możesz się do niego połączyć po adresie hosta db
(no i po domyślnym porcie 5432
)
-
depends_on
określa jakie inne kontenery powinni być uruchomione zanim uruchomisz ten kontener. Tutaj to sprawi, że Docker uruchomi bazę (jeśli nie jest uruchomiona) przed tym, jak uruchomi apkę.
- Postgresa stawiasz inaczej niż swoją apkę, tj. używając
image
co oznacza, że pobierasz gotowca z repozytorium. Tutaj to jest obraz o nazwie postgres
z tagiem wersji 16.1-alpine
-
Poczytaj sobie tutaj https://hub.docker.com/_/postgres jakie zmienne środowiskowe możesz ustawić. Ja ci dałem jedynie użytkownika i hasło, co oznacza że dostaniesz bazę o tej samej nazwie co użytkownik. Ponadto te zmienne wpływają tylko na pierwsze uruchomienie, jak już się stan zapisze do wolumenu to nie zmienisz hasła tymi zmiennymi :p