Не работает тег шаблона 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, чтобы мы могли свободно получать сообщения.

Вернуться на верх