2016-08-01 15 views
0

Ich gründe django mit Docker und ich kann nicht wirklich bekommen, was der richtige Weg ist, um Setup der setting.pyDjango Docker Einstellungen mit Link und Umgebung

Um zum Beispiel die Datenbank, die ich jetzt habe in die setting.py ist:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': os.environ['db_name'], 
     'USER': os.environ['db_user'], 
     'PASSWORD': os.environ['db_password'], 
     'HOST': 'db', 
     'PORT': '5432', 
    } 
} 

wo db_name, db_user, db_password in einer Umgebung Datei festgelegt werden. db ist stattdessen eine --link (docker run --link mydb:db ..).

Nun scheint es zu arbeiten, aber ich bin nicht wirklich sicher, ob ich wie dies tun soll.

Ist dies der richtige Weg die Einstellungen einrichten? Besonders dort, wo das absondern Dinge sollen platziert werden, was die Art und Weise ist Variablen in der Umgebung zu nennen (scheinbar Docker DB_ Variablen schafft), und wann/wie in den Einstellungen die verknüpften Container verwenden (mit dem Namen oder mit env Variablen?).

Gibt es eine Möglichkeit, 'db' oder eine Umgebungsvariable wie host zu verwenden? Ich möchte haben, so beacuse ich die db als link oder innerhalb der .env Datei angeben.

Antwort

0

Sie können Umgebungsvariable auf Behälter mit dem -e Flagge passieren:

docker run -e VAR_NAME=VAR_VALUE ... 

so, wenn Ihr db Wert auf den Prozess zugänglich ist, den Behälter läuft, können Sie etwas in diese Richtung tun könnte:

export DB=db 
docker run -e db_host=$DB --link mydb:$DB mycontainer 

und dann Einstellungen in Django:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': os.environ['db_name'], 
     'USER': os.environ['db_user'], 
     'PASSWORD': os.environ['db_password'], 
     'HOST': os.environ['db_host'], # 'db' in this example 
     'PORT': '5432', 
    } 
} 

Je nach einrichten, könnten Sie auch die ganze .env Datei statt laden Sie die einzelnen DB Variable exportieren (Blick auf die the answers to this question für eine Erklärung, wie es zu tun). Auf diese Weise - vorausgesetzt, Ihre App kümmert sich darum, die env-Datei für sich selbst zu laden - müssen Sie keine Umgebungsvariable an den Container übergeben, da die App auf die .env-Datei angewiesen ist, um den Wert abzurufen.

# Assuming DB=db in the .env file 
docker run -e --link mydb:$DB mycontainer 
Verwandte Themen