Не работает тег шаблона Docker + Django if_debug
Я запускаю docker-compose с nginx, маршрутизирующим запросы на мой сервер Django, с таким конфигом:
upstream django {
server backend:8000;
}
server {
listen 80;
location / {
proxy_pass http://django;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
Для использования тега шаблона {% if debug %}
я знаю, что мне нужен правильный внутренний IP и включенный параметр DEBUG. Я получаю правильный внутренний IP, выполнив следующий фрагмент кода в моем Django settings.py
:
import socket
hostname, _, ips = socket.gethostbyname_ex(socket.gethostname())
INTERNAL_IPS = [ip for ip in ips] + ['127.0.0.1']
Когда я docker exec -it backend sh
импортирую параметры DEBUG и INTERNAL_IPS, я получаю значения ['172.19.0.4', '127.0.0.1']
и True
соответственно. Затем, когда я запускаю docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
для проверки IP-адресов контейнеров, я вижу, что backend
контейнер, на котором запущен Django, имеет IP 172.19.0.4
, такой же, как и внутренний IP.
Несмотря на все это, в шаблоне Django я получаю ошибку режима отладки Django (что еще раз доказывает, что отладка включена), которая говорит, что ошибка возникла на строке 61!!!
57 {% if debug %}
58 <!-- This url will be different for each type of app. Point it to your main js file. -->
59 <script type="module" src="http://frontend:3000/src/main.jsx"></script>
60 {% else %}
61 {% render_vite_bundle %}
62 {% endif %}
Может ли кто-нибудь помочь мне понять, что я делаю неправильно и почему этот тег шаблона не работает? Есть ли более простой способ сделать оператор if, основанный на настройках отладки Django? Заранее спасибо!
Я разобрался! Когда я вводил hostname, _, ips = socket.gethostbyname_ex(socket.gethostname())
, я получал IP-адрес внутреннего контейнера, но на самом деле я хотел пометить перенаправление Nginx как "внутреннее". Поэтому я изменил строку на hostname, _, ips = socket.gethostbyname_ex("nginx")
, и запрос был перенаправлен правильно. Возможно, стоит рассмотреть возможность внесения в белый список всех внутренних IP-адресов контейнеров DOcker, чтобы мы могли свободно получать сообщения.