Docker环境变量和Django数据库设置
我正在运行一个Docker容器,里面有Django 这是我的dev.yml文件:Docker环境变量和Django数据库设置,django,docker,environment-variables,Django,Docker,Environment Variables,我正在运行一个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_ba
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
但当我:
docker-compose -f dev.yml run django echo $DATABASE_URL
我只想测试容器中的数据库和本地机器中的数据库之间的简单切换
编辑#1
我的变量已有效设置,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没有考虑这个变量(我可以处理docker的postgres db中存储的数据)
my config.py文件:
DATABASES = {
# Raises ImproperlyConfigured exception if DATABASE_URL not in os.environ
'default': env.db('DATABASE_URL', default='postgres:///sorbetcitron'),
}
我不是Python专家,但您读取环境变量的代码在我看来是错误的 请尝试:
import os
DB_URL = os.getenv('DATABASE_URL')
使用:
这意味着您正在使用django Enviro包来设置环境变量,在这种情况下,您需要一个包含所有已使用变量的.env文件。如果你没有使用这个软件包,这就是为什么你没有在django设置上加载。在这种情况下,您应该使用:
import os
os.getenv('DATABASE_URL')
或
@ArdiNusawan是的,这也可以,但是getenv(甚至是
os.environ.get('DATABASE\u URL')
工作得更好,因为如果未设置DATABASE\u URL
,它将返回none
。其中asos.environ['DATABASE\u URL']
将返回一个键错误。
import os
os.getenv('DATABASE_URL')
import os
os.environ.get('DATABASE_URL')