我计划在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']