Потому что области видимости....
То выражение равносильно
l1 = [(lambda: x) for x in range(3)]
x == 2 потому что в результате лист компрехеншн он последний присваивается
А lambda потом использует этот "глобальный" x
Один контейнер с джангой, с постгресом, гуникорном и nginx и че там еще надо для бека, второй контейнер с фронтом. Если там REST, то фронт с беком никак не связан же, хоть на разные тачки деплой, в чем проблема-то?