如何动态地将 Docker 容器的 IP 添加到 Django 的ALLOWED_HOST



我计划在Docker中部署我的Django应用程序。对于主机验证,我们需要将ALLOWED_host变量设置为域名或IP地址。

如何将为我的应用程序提供服务的容器的IP地址添加到允许的主机?

出于安全考虑,我不想使用通配符或IP范围。我能做什么?

只需在容器启动(例如,您的CMD或可能的ENTRYPOINT(中包含一个脚本,即可获取容器ip地址并将其放置在文件中。例如

#!/bin/sh
myaddr=$(ip addr show eth0 | awk '$1 == "inet" {print $2}' | cut -f1 -d/)
sed -i "s/^ALLOWED_HOSTS=.*/ALLOWED_HOSTS=$myaddr/" /path/to/config/file.conf

虽然说实话,我不确定你是否想这么做。。。通常,您将通过主机上已发布的端口访问容器化服务(例如,通过-p选项访问docker run(,因此您需要的不是容器ip,而是主机ip(或localhost,具体取决于您的用例(。

我建议使用流行的python包netifaces来动态确定djsango应用程序的settings.py中的ip地址。

您可以使用以下函数来获得优势。

import netifaces as ni
ni.ifaddresses('eth0')
ip = ni.ifaddresses('eth0')[ni.AF_INET][0]['addr']
allowed_hosts = [ip, '127.0.0.1']

我认为最好在您的设置中放入您允许的主机.py:

allowed_hosts = ['0.0.0.0']

最新更新