2016-08-19 100 views
0

我正在Django里面运行一个Docker容器。Docker环境变量和Django数据库设置

这里是我的dev.yml文件:

version: '2' 

volumes: 
    postgres_data_dev: {} 
    postgres_backup_dev: {} 

services: 
    postgres: 
    build: ./compose/postgres 
    volumes: 
     - postgres_data_dev:/var/lib/postgresql/data 
     - postgres_backup_dev:/backups 
    environment: 
     - POSTGRES_USER=sorbetcitron 

    django: 
    build: 
     context: . 
     dockerfile: ./compose/django/Dockerfile-dev 
    command: python ./manage.py runserver_plus 0.0.0.0:8000 
    depends_on: 
     - postgres 
    environment: 
     - POSTGRES_USER=sorbetcitron 
     - USE_DOCKER=yes 
     - DJANGO_DEBUG=True 
     - DATABASE_URL=postgres://django:[email protected]:5432/sorbetcitron 
    volumes: 
     - .:/app 
    ports: 
     - "8000:8000" 
    links: 
     - postgres 



    pycharm: 
    build: 
     context: . 
     dockerfile: ./compose/django/Dockerfile-dev 
    depends_on: 
     - postgres 
    environment: 
     - POSTGRES_USER=sorbetcitron 
    volumes: 
     - .:/app 
    links: 
     - postgres 

然后我开始我的容器:

docker-compose -f dev.yml up 

但是我没有环境变量设置,当我:

docker-compose -f dev.yml run django echo $DATABASE_URL 

我只想测试我的容器中的数据库与本地机器中的另一个数据库之间的简单开关。

编辑#1 我的变量被有效地设定,如搬运工,撰写配置的回报:

services: 
    django: 
    build: 
     context: /Users/vincentle/dev/sorbetcitron 
     dockerfile: ./compose/django/Dockerfile 
    command: /gunicorn.sh 
    depends_on: 
    - postgres 
    - redis 
    environment: 
     DATABASE_URL: postgres://django:[email protected]:5432/sorbetcitron 
     DJANGO_ACCOUNT_ALLOW_REGISTRATION: 'True' 
     DJANGO_ADMIN_URL: '' 
     DJANGO_ALLOWED_HOSTS: .sorbetcitron.com 
     DJANGO_AWS_ACCESS_KEY_ID: '' 
     DJANGO_AWS_SECRET_ACCESS_KEY: '' 
     DJANGO_AWS_STORAGE_BUCKET_NAME: '' 
     DJANGO_MAILGUN_API_KEY: '' 
     DJANGO_SECRET_KEY: s+s6-^@s&[email protected]!qsprhd5-1-0*wuh*0tjm_5)%uq(5q(nc4c 
     DJANGO_SECURE_SSL_REDIRECT: 'False' 
     DJANGO_SENTRY_DSN: '' 
     DJANGO_SERVER_EMAIL: '' 
     DJANGO_SETTINGS_MODULE: config.settings.production 
     POSTGRES_PASSWORD: mysecretpass 
     POSTGRES_USER: postgresuser 
    user: django 

但我不明白为什么我的Django没有采取在考虑这个变量(我可以玩用)存放在码头工人的Postgres数据库数据

我config.py文件:

DATABASES = { 
    # Raises ImproperlyConfigured exception if DATABASE_URL not in os.environ 
    'default': env.db('DATABASE_URL', default='postgres:///sorbetcitron'), 
} 

回答

1

我不是一个Python专家,但你的代码来读取环境变量看起来不对我。

请尝试:

import os 
DB_URL = os.getenv('DATABASE_URL')