解决Django的调试工具条在Docker中不显示的问题

111 阅读1分钟

背景介绍

在开发Django网络应用程序时,调试数据库查询性能、内部变量值或其他自定义指标的最常用方法之一是django-debug-toolbar

要将工具栏集成到Django网络应用程序中,首先需要配置一个内部IP地址列表。只有当访问网络应用程序的网络浏览器的IP地址是这个列表的一部分时,工具栏才会被显示。否则,工具栏就会被隐藏起来(即使它已经被安装并包含在内)。

问题描述

然而,在Docker容器内开发时,内部IP会定期变化,一直更新配置是很乏味的。

本文介绍了一种替代方法,即把当前的主机IP动态地添加到INTERNAL_IPS 列表中。

解决方案的方法

基本上,我们的想法是根据主机的内部IP来生成INTERNAL_IPS列表。我们从只包含localhost(127.0.0.1)的静态列表开始,然后将当前主机的IP添加到这个列表中。将这段代码添加到config/settings.py

INTERNAL_IPS = ['127.0.0.1']

import socket
hostname, _, ips = socket.gethostbyname_ex(socket.gethostname())
INTERNAL_IPS += [".".join(ip.split(".")[:-1] + ["1"]) for ip in ips]

socket.gethostname() 将等于Docker容器的ID。然后,对 的调用将显示容器的 IP 地址。例如,在我目前的设置中: 最后,我们在列表中添加一个条目 。然而,我们并没有添加容器的IP本身,而是将容器的IP的最后一个八位数替换为1。在我的例子中, 。按照惯例,这就是主机本身的内部IP。而且,万一容器有多个IP地址,这个转换将对所有这些地址进行。socket.gethostbyname_ex() 172.20.0.3 INTERNAL_IPS 172.20.0.1