Docker环境variables和Django数据库设置

我正在用Django运行一个Docker容器。

这是我的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:django@localhost: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 

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

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

我只想testing我的容器中的数据库和我的本地机器中的另一个数据库之间的简单切换。

编辑#1我的variables被有效地设置,因为docker-compose config返回:

 services: django: build: context: /Users/vincentle/dev/sorbetcitron dockerfile: ./compose/django/Dockerfile command: /gunicorn.sh depends_on: - postgres - redis environment: DATABASE_URL: postgres://django:django@localhost: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&=xg@l7!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没有考虑这个variables(我可以使用存储在docker的postgres数据库中的数据)

我的config.py文件:

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

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

请尝试:

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