Django-debug-toolbar: Mauvaise IP lorsque plusieurs réseaux dans Docker

Créé le 13 avr. 2018  ·  5Commentaires  ·  Source: jazzband/django-debug-toolbar

La solution utilisée dans cookiecutter-django ne fonctionne pas lorsque le conteneur Django est connecté à plusieurs réseaux dans Docker. La solution est quelque chose comme ce qui suit (tiré de ce post SO ):

import socket

ip = socket.gethostbyname(socket.gethostname())
INTERNAL_IPS = ['127.0.0.1', ip[:-1] + '1']

Ma configuration Docker Compose contient les éléments suivants :

networks:
  web_network: {}
  cache_network: {}
  database_network: {}


services:
  djangoapp:
    networks:
      - database_network
      - web_network
      - cache_network

Maintenant, l'IP renvoyée par ip = socket.gethostbyname(socket.gethostname()) n'est pas toujours la même. Il semble que ce soit l'adresse IP de l'un des différents réseaux disponibles (si cela a du sens). Donc parfois ça marche, mais la plupart du temps ça ne marche pas.

J'ai fini par ajouter toutes les adresses IP possibles en fonction de celle renvoyée par socket , quelque chose comme :

def internal_docker_ips(base_ip):
    numbers = base_ip.split('.')
    return [
        '.'.join([numbers[0], str(i), numbers[2], str(j)])
        for i in range(1, 254) for j in (1, 3)  # all IPs ending with '.1' and '.3'
    ]

INTERNAL_IPS = [
    '127.0.0.1',
]

INTERNAL_IPS.extend(
    internal_docker_ips(
        socket.gethostbyname(
            socket.gethostname())))

# ['127.0.0.1', '172.1.0.1', '172.1.0.3', '172.2.0.1', '172.2.0.3', ..., '172.253.0.1', '172.253.0.3']

Existe-t-il une solution de contournement plus propre pour cela? L'un d'entre vous a-t-il eu le même problème ? Il n'est peut-être pas lié à la barre d'outils de débogage Django elle-même, mais toute aide est appréciée et, je pense, sera utile pour les autres.

Commentaire le plus utile

C'est ce que je fais:

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})()

Attribuez simplement un objet qui contient toutes les choses à INTERNAL_IPS . Bien sûr, ne faites

Tous les 5 commentaires

C'est ce que je fais:

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})()

Attribuez simplement un objet qui contient toutes les choses à INTERNAL_IPS . Bien sûr, ne faites

Astucieux! Vous devriez envisager d'ajouter cette réponse au message SO mentionné! Je voterais certainement pour ça :sourire:

Il semble qu'il n'y ait plus d'intérêt pour ce problème, et j'ai eu ma réponse : fermeture :slightly_smiliing_face:

Un de mes collègues utilise une autre solution pour cela : en fait, django-debug-toolbar fournit un paramètre de configuration appelé SHOW_TOOLBAR_CALLBACK .

DEBUG_TOOLBAR_CONFIG = {
    'SHOW_TOOLBAR_CALLBACK': lambda request: True,
}

# or

DEBUG_TOOLBAR_CONFIG = {
    'SHOW_TOOLBAR_CALLBACK': lambda request: True if DEBUG else False,
}
Cette page vous a été utile?
0 / 5 - 0 notes