2016-08-01 74 views
0

我设立的Django与码头工人,我不能真正得到什么设置正确的方式setting.py与链路和环境的Django泊坞窗设置

例如,我有数据库目前已经在所述setting.py是:

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', 
    } 
} 

其中db_namedb_userdb_password在环境文件被设置。 db改为--linkdocker run --link mydb:db ..)。

现在,它似乎工作,但我不知道我应该这样做。

这是设置设置的正确方法吗?尤其是在应该放置什么东西的情况下,在环境中调用变量的方式是什么(显然,docker正在创建变量),以及何时/如何在设置中使用链接容器(使用名称或使用env变量?)。

有没有办法使用'db'或环境变量作为host?我想这样做可能会指定dblink或在.env文件中。

回答

0

你可以通过环境变量容器与-e标志:

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

docker run -e VAR_NAME=VAR_VALUE ... 

所以,如果你的db值的方法访问运行容器,你可以沿着这些线路做一些事情

,然后在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', 
    } 
} 

根据您的设置,您也可以加载整个.env文件,而不是导出单个DB变量(请参阅the answers to this question以获取有关它的解释)。通过这种方式 - 假设您的应用程序负责为自身加载env文件 - 您不必将环境变量传递给容器,因为应用程序将依靠.env文件获取该值。

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