So I got docker and Django to work locally, first by building an image from a Dockerfile, then using Fig to get postgres image, link it to the base image, and run the localserver. Everything works just fine, except for django_debug_toolbar. For some reason it just won't show up. Have the dockerhost ip as well in the internal_ips. Can anyone help me out with it? Docker is running on mac via boot2docker.
Thanks!
My settings:
init.py
import os
if 'DEBUG' not in os.environ or not os.environ['DEBUG']:
from .local import *
else:
pass
base.py
""" common and global settings """
from sys import path
from os import environ
from os.path import abspath, basename, dirname, join, normpath
from django.core.exceptions import ImproperlyConfigured
import dj_database_url
def get_env_variable(var_name):
try:
return environ[var_name]
except KeyError:
error_msg = "Set the environment variable" % var_name
raise ImproperlyConfigured(error_msg)
# Paths
DJANGO_ROOT = dirname(dirname(abspath(__file__)))
SITE_ROOT = dirname(DJANGO_ROOT)
SITE_NAME = basename(DJANGO_ROOT)
# End Paths
# URLs
MEDIA_ROOT = normpath(join(SITE_ROOT, 'media'))
MEDIA_URL = "/media/"
STATIC_ROOT = normpath(join(SITE_ROOT, 'assets'))
STATIC_URL = "/static/"
STATICFILES_DIRS = (
normpath(join(SITE_ROOT, 'static')),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
ROOT_URLCONF = '%s.urls' % SITE_NAME
path.insert(0, join(DJANGO_ROOT, 'apps')) # add apps folder to system path
# End URLs
# Database
# example: postgres://joris:luna@localhost/bitbybit
DATABASES = {'default': dj_database_url.config(
default='postgres://postgres@db:5432/postgres')}
# End Database
# Templates
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.tz',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.request',
)
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
TEMPLATE_DIRS = (
normpath(join(SITE_ROOT, 'templates')),
)
# End Templates
# SECURITY WARNING: keep the secret key used in production secret!
# make it unique and store it as an environment variable
SECRET_KEY = r"d%g7_h6cz=xbhs*5-i+e$c7mns*s)^_+#^8n@^-2dno@uie-z9"
# Application
DJANGO_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
)
LOCAL_APPS = (
'home',
)
INSTALLED_APPS = DJANGO_APPS + LOCAL_APPS
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
)
WSGI_APPLICATION = '%s.wsgi.application' % SITE_NAME
# End Application
# Internationalization
LANGAUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# End Internationalization
Local.py
from .base import *
# Debug config
DEBUG = True
TEMPLATE_DEBUG = DEBUG
# End Debug config
# Hosts
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
# End Hosts
# Django Debug Toolbar config
INSTALLED_APPS += (
'debug_toolbar', )
INTERNAL_IPS = ('127.0.0.1', 'localhost')
# End Django Debug Toolbar config
Here's a hacky way that doesn't require injecting the address into the container. I'm not sure how it would work if your container is connected to multiple networks and could break if docker changed the way they assign addresses (though that doesn't seem likely).