Django-debug-toolbar: Docker 中的多个网络时 IP 错误

创建于 2018-04-13  ·  5评论  ·  资料来源: jazzband/django-debug-toolbar

cookiecutter-django中使用的解决方案在 Docker 中 Django 容器连接到多个网络时不起作用。 解决方案类似于以下内容(取自this SO post ):

import socket

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

我的 Docker Compose 配置有以下几项:

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


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

现在ip = socket.gethostbyname(socket.gethostname())返回的 IP 并不总是相同的。 它似乎是不同可用网络之一的 IP(如果有道理的话)。 所以有时它有效,但大多数时候它不起作用。

我最终根据socket返回的 IP 添加了所有可能的 IP,例如:

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']

是否有更清洁的解决方法? 你们中有人有同样的问题吗? 它可能与 Django 调试工具栏本身无关,但感谢任何帮助,我相信对其他人有用。

最有用的评论

这就是我所做的:

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

只需将包含所有内容的对象分配给INTERNAL_IPS 。 当然永远不要在生产主机上这样做!

所有5条评论

这就是我所做的:

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

只需将包含所有内容的对象分配给INTERNAL_IPS 。 当然永远不要在生产主机上这样做!

聪明的! 您应该考虑将此答案添加到提到的 SO 帖子中! 我肯定会赞成它 :smile:

我已经在这里添加了 :) https://stackoverflow.com/a/49818040/317346

似乎对这个问题没有进一步的兴趣,我得到了我的答案:关闭:slightly_smiling_face:

我的一位同事为此使用了另一种解决方案:实际上 django-debug-toolbar 提供了一个名为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,
}
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

lfigueira picture lfigueira  ·  10评论

Arlington1985 picture Arlington1985  ·  5评论

dvaldivia picture dvaldivia  ·  6评论

stfenjobs picture stfenjobs  ·  6评论

mwoodward-atd picture mwoodward-atd  ·  11评论