我正在用docker设置django,我无法真正得到设置setting.py的正确方法。
例如,我现在在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_name
,db_user
,db_password
在环境文件中设置。 db
取而代之的是--link
(docker run --link mydb:db ..
)。
现在,它似乎有效,但我不确定我应该这样做。
这是设置设置的正确方法吗?特别是在应该放置秘密事物的地方,在环境中调用变量的方式是什么(显然docker正在创建DB_
变量),以及何时/如何在设置中使用链接容器(使用名称或使用env)变量?)。
有没有办法将'db'
或环境变量用作host
?我希望如此,我可以将db
指定为link
或.env
文件。
答案 0 :(得分:0)
您可以将环境变量传递给具有-e
标志的容器:
docker run -e VAR_NAME=VAR_VALUE ...
因此,如果运行容器的进程可以访问您的db
值,那么您可以执行以下操作:
export DB=db
docker run -e db_host=$DB --link mydb:$DB mycontainer
然后在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