24

そこで、まず Dockerfile からイメージを作成し、次に Fig を使用して postgres イメージを取得し、それをベース イメージにリンクして、ローカル サーバーを実行することで、docker と Django をローカルで動作させました。django_debug_toolbar を除いて、すべて正常に動作します。なぜか表示されなくなります。internal_ips に dockerhost の IP も含めます。誰でも私を助けてくれますか?Docker は、boot2docker を介して Mac 上で実行されています。

ありがとう!

私の設定:

初期化.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
4

10 に答える 10

48

構成SHOW_TOOLBAR_​​CALLBACKを使用すると、私のために目が覚めました

def show_toolbar(request):
        return True

DEBUG_TOOLBAR_CONFIG = {
    'SHOW_TOOLBAR_CALLBACK': show_toolbar,
}

お役に立てば幸いです:)

于 2018-05-14T14:09:28.263 に答える
24

コンテナー IP をコピー/貼り付けするのではなく、プログラムでこれを行いたい場合は、django-cookiecutter の人々のようにすることをお勧めします。ローカル設定ファイルで:

INTERNAL_IPS = ['127.0.0.1', ]
import socket

# tricks to have debug toolbar when developing with docker
ip = socket.gethostbyname(socket.gethostname())
INTERNAL_IPS += [ip[:-1] + '1']

参考までに、これはdjango-cookiecutter local.py設定ファイルへのリンクです。

于 2017-08-10T23:18:07.057 に答える
22

INTERNAL_IPSすべてを含むオブジェクトを作成できます。これが私がすることです:

if DEBUG:
    # `debug` is only True in templates if the vistor IP is in INTERNAL_IPS.
    INTERNAL_IPS = type(str('c'), (), {'__contains__': lambda *a: True})()

もちろん、本番ホストでこれを行うべきではありません!

説明:

型関数 (3 つの引数バリアント: https://docs.python.org/3/library/functions.html#type__contains__ ) は、この場合はメソッドのみを持つ新しいクラスを作成します ( https://docs.python.org /3/reference/datamodel.html#object. contains ) -- contains はメンバーシップ テストの実装に使用されます。つまり、このメソッドは " if ip in INTERNAL_IPS" などの実行時に呼び出されます。contains メソッド自体は、" " と記述した方がわかりやすいでしょうdef __contains__(self):\n return True。新しく作成されたクラスはすぐにインスタンス化され (最後の "()")、INTERNAL_IPS に割り当てられます。

于 2018-04-13T13:20:10.967 に答える
13

Django Debug Toolbarを表示できる IP アドレスは、docker コンテナー (Django アプリを実行するコンテナー)のゲートウェイ IPでした。

ゲートウェイの IP アドレスを取得するには、次のコマンドを実行します。

# replace django_container_name with your container name!
docker inspect django_container_name | grep -e '"Gateway"'
# "Gateway": "172.18.0.1",

次に、このGetway IPを- に追加しsettings.pyます。構成は次のようになります。

INSTALLED_APPS = (
    ...
    'debug_toolbar',
    ...
)

MIDDLEWARE = [
    ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    ...
]

INTERNAL_IPS = ['172.18.0.1']

そしてもちろん__debug__を追加しますurls.py

import debug_toolbar
from django.conf import settings
from django.urls import include, path

urlpatterns = [
    ...
    path('__debug__/', include(debug_toolbar.urls)),
]

djdt インストールガイドに従うだけです。

于 2016-09-12T14:26:10.943 に答える
2

解決しました。リクエスト ヘッダーの REMOTE_ADDR の値を確認し、INTERNAL_IPS に追加しました。

于 2014-11-13T01:31:54.187 に答える
0

1- ディレクトリ docker-compose または Dockerfile で次のコマンドを実行し、ネットワーク ID を取得します。

sudo docker network list

すべてのネットワークのリストを表示

NETWORK ID     NAME                DRIVER    SCOPE
556e2e7123er   admin_default       bridge    local
aq3033sc09c1   bridge              bridge    local
1983cf1x2cb9   cockroach           bridge    local
0cc1be23b543   flask               bridge    local

2- 次のコマンドを実行します。

ip addr

.
.

8: br-556e2e7123er: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
    inet 162.21.0.1/16 brd 172.22.255.255 scope global br-556e2e7123er
       valid_lft forever preferred_lft forever

.
.

3-IP を取得する

NETWORK ID : 556e2e7123er == 8: br-556e2e7123er => ip 162.21.0.1

4- IP を INTERNAL_IPS = [..., 162.21.0.1, ...] に追加します‍‍‍‍‍‍‍‍‍‍‍‍</p>

于 2021-07-16T10:28:08.467 に答える