1

Site officiel says, que si vous voulez construire une base de données postgresql, mettez simplement des variables POSTGRES_USER, POSTGRES_PASSWORD and POSTGRES_DB. Je les mets dans le fichier .env et écris en docker-compose le fichier env_file: ./.env, mais alors django dit: django.db.utils.OperationalError: FATAL: database "languages" does not exist. Cela signifie que je devrais écrire un script .sql avec des commandes. Questions:Impossible de créer la base de données avec l'image docker postgresql par défaut

  1. Une écriture sript sql est la seule façon de le faire fonctionner?
  2. Comment puis-je l'écrire et où le mettre si je ne veux pas explicitement écrire des informations sensibles comme mot de passe, je veux utiliser le fichier .env comme je vais stocker le script .sql dans le rapport public?

Mon fichier .env

DEBUG=True 
SECRET_KEY=... 
POSTGRESQL_DATABASE=languages 
POSTGRESQL_USERNAME=admin 
POSTGRESQL_PASSWORD=pass 
POSTGRESQL_ADDRESS=postgres 
POSTGRES_DB=languages 

Mon fichier docker-Compose:

version: '3' 

services: 
    web: 
    build: ./web 
    env_file: ./web/microservice/.env 
    volumes: 
     - ./web:/code/ 
    depends_on: 
     - postgres 
    command: python manage.py runserver 0.0.0.0:8000 

    nginx: 
    build: ./nginx/ 
    ports: 
     - "80:80" 
     - "443:443" 
    volumes: 
     - ./web/static:/code/static 
    depends_on: 
     - web 

    postgres: 
    image: postgres:latest 
    ports: 
     - "5432:5432" 
    env_file: ./web/microservice/.env 
    volumes: 
     - /var/lib/postgresql/data/ 

Mon Dockefile:

FROM python:3.5 
ENV PYTHONUNBUFFERED 1 
RUN mkdir /code 
WORKDIR /code 
ADD ./requirements.txt /code/ 
RUN pip install --no-cache-dir -r requirements.txt 
ADD . /code/ 
EXPOSE 8000 
CMD ["/usr/local/bin/gunicorn", "translation_microservice.wsgi", "-w", "2", "-b", ":8000", "--access-logfile", "-", "--capture-output"] 

Répondre

2

On dirait que vous utilisez des noms de variables incorrectes. Remplacez POSTGRESQL_USERNAME par POSTGRES_USER et ainsi de suite dans votre fichier .env

Vous devrez peut-être effacer le volume du docker contenant votre base de données s'il a déjà été créé dans un autre environnement. La valeur par défaut est de créer un utilisateur et une base de données nommés postgres

N'ajoutez pas le fichier .env à un dépôt public.