2017-09-29 3 views
2

Je suis nouveau sur docker et j'essaye d'héberger un projet django dans docker. J'ai essayé de suivre le tutoriel de here mais au lieu de postgresql, j'utilise sqlite. J'ai essayé de courir docker-compose up mais docker était coincé à ceci: enter image description heredocker ne fonctionne pas serveur django

mon Dockerfile:

FROM python:3.6 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
ADD requirements.txt /code/ 
RUN pip install -r requirements.txt 
ADD . /code/ 

et mon docker-compose.yml:

version: '3' 

services: 
    db: 
    image: spartakode/sqlite3:latest 
    web: 
    build: . 
    command: python3 manage.py runserver 0.0.0.0:8000 
    volumes: 
     - .:/code 
    ports: 
     - "8000:8000" 
    depends_on: 
     - db 

Quelqu'un peut-il me aider? Merci

+1

Votre db échoue et sort – Ayushya

+0

ne savez-vous pourquoi? Je ne trouve pas de guide sur la façon d'utiliser sqlite avec django et docker en ligne – beneditatan

Répondre

0

Vous n'avez monté aucune base de données dans l'image sqlite. Le readme du référentiel sqlite dit de monter la base de données au /db/db.db à l'intérieur du conteneur.

Vous pouvez le faire en incluant des volumes dans le fichier docker-compose.yml. Votre nouveau fichier devrait ressembler à:

version: '3' 

services: 
    db: 
    image: spartakode/sqlite3:latest 
    volumes: 
     - ./database.db:/db/db.db 
    web: 
    build: . 
    command: python3 manage.py runserver 0.0.0.0:8000 
    volumes: 
     - .:/code 
    ports: 
     - "8000:8000" 
    depends_on: 
     - db 
+0

Salut, j'ai essayé mais il a retourné 'erreur: impossible d'ouvrir la base de données db.db: impossible d'ouvrir le fichier de base de données avec le code 1'. J'ai également essayé de changer db.db en db.sqlite3 et il est toujours sorti avec le code 0 – beneditatan

+0

Je pense que vous devez avoir un fichier de base de données existant dans le répertoire de base. – Ayushya

0

SQLite est un fichier de base de données locale python/django écrit directement, pas un serveur de base de données à distance, vous pouvez vous connecter.

  • Pour Postgres, vous souhaitez utiliser un postgres séparé docker et vous auriez 'HOST': 'db' dans votre milieu DATABASES.

  • Pour sqlite, vous devez avoir 'NAME': 'localfilename.db' dans votre paramètre DATABASES. Le support sqlite est construit directement dans python, vous n'avez donc pas besoin de paquets supplémentaires.

    Dans votre cas, cela signifie que vous pouvez supprimer l'intégralité du service db de votre docker-compose.yml, ne laissant que le service web.

Remarque: si vous utilisez SQLite dans un docker, vous devez vous assurer que le fichier de base de données réelles sont stockées quelque part sur un volume, sinon le fichier est perdu lors de l'arrêt de votre docker. Dans votre cas, vous allez bien, parce que vous avez monté le répertoire courant comme /code dans votre docker-compose.yml. Le fichier db sera /code/localfilename.db dans votre docker et seulement localfilename.db dans votre répertoire de développement local.

Pour référence, votre settings.py devrait inclure quelque chose comme ceci:

DATABASES = { 
    'default': {'ENGINE': 'django.db.backends.sqlite3', 
       'NAME': 'localfilename.db'}, 
}