Django Docker设置链接和环境

时间:2016-08-01 09:43:38

标签: django docker

我正在用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_namedb_userdb_password在环境文件中设置。 db取而代之的是--linkdocker run --link mydb:db ..)。

现在,它似乎有效,但我不确定我应该这样做。

这是设置设置的正确方法吗?特别是在应该放置秘密事物的地方,在环境中调用变量的方式是什么(显然docker正在创建DB_变量),以及何时/如何在设置中使用链接容器(使用名称或使用env)变量?)。

有没有办法将'db'或环境变量用作host?我希望如此,我可以将db指定为link.env文件。

1 个答案:

答案 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