NetSendo v2.11.1: koniec z błędami 502 po aktualizacji Dockera
Uruchamiasz docker compose pull i docker compose up -d, nowe kontenery startują i wszystko wygląda dobrze. Potem otwierasz panel i widzisz 502 Bad Gateway. Sama aktualizacja się udała. Problem polegał na tym, że nginx nadal wysyłał żądania pod adres, którego kontener aplikacji już nie miał.
W dniu wdrożenia aktualizacji do 2.11.0 dotyczyło to 7 z 16 hostowanych instalacji NetSendo. NetSendo v2.11.1 usuwa przyczynę problemu. Serwer WWW uruchamia się teraz ponownie automatycznie za każdym razem, gdy Docker Compose odtwarza kontener aplikacji, więc po aktualizacji nie musisz już restartować go ręcznie.
restart: true do zależności serwera WWW od aplikacji w docker-compose.yml. W Docker Compose 2.17 lub nowszym nginx restartuje się przy każdym odtworzeniu kontenera aplikacji, więc po aktualizacjach nie pojawiają się błędy 502. Jeśli masz własny plik compose, po każdej aktualizacji uruchom docker compose restart webserver. podman-compose akceptuje to ustawienie, ale je ignoruje.
🚀 Co nowego w v2.11.1
Przyczyna: nginx ustala adres aplikacji tylko raz
Serwer WWW NetSendo przekazuje żądania PHP do kontenera aplikacji dyrektywą w rodzaju fastcgi_pass app:9000. nginx zamienia nazwę hosta app na adres IP tylko raz, przy starcie, i używa tego adresu aż do restartu.
Gdy uruchamiasz docker compose up -d z nowym obrazem, Compose odtwarza kontener aplikacji, a nowy kontener często dostaje inny adres IP w sieci Dockera. nginx ma nadal stary adres, więc każde żądanie kończy się błędem:
connect() failed (111) while connecting to upstream
To tak, jakby kurier raz zapisał Twój adres i nigdy go nie sprawdzał. Przeprowadzasz się, a wszystkie paczki nadal trafiają pod stary dom.
Poprawka: serwer WWW restartuje się razem z aplikacją
Rozszerzona składnia depends_on w Docker Compose ma opcję restart. Gdy ustawisz ją na true, Compose restartuje usługę zależną (serwer WWW) za każdym razem, gdy odtwarza lub restartuje jej zależność (aplikację). Odpowiedni fragment wygląda tak:
services:
webserver:
# ...
depends_on:
app:
condition: service_started
restart: true
Po restarcie nginx ponownie sprawdza adres app i dostaje nowy, więc żądania od razu trafiają do nowego kontenera.
Automatyczny restart serwera WWW
nginx restartuje się, gdy Compose odtwarza kontener aplikacji.
Koniec z nieaktualnym upstreamem
nginx nie może już wysyłać ruchu pod stary adres IP kontenera.
Wbudowane w Docker Compose
Standardowa opcja Compose (2.17+). Bez dodatkowych skryptów i sidecarów.
ℹ️ Uwaga: Ta opcja wymaga Docker Compose 2.17 lub nowszego. podman-compose ją akceptuje, ale nic z nią nie robi, więc użytkownicy Podmana nadal muszą restartować serwer WWW ręcznie.
💼 Komu pomaga ta poprawka
- Brak błędów 502 po rutynowych aktualizacjach
- Brak ręcznego kroku po
docker compose up -d - Bezpieczniejsze aktualizacje automatyczne i planowane
- Mniej zgłoszeń typu „strona nie działa”
E-commerce: formularze i śledzenie działają dalej
Błąd 502 po aktualizacji oznacza, że formularze zapisu, strony preferencji i linki śledzące przestają odpowiadać. Jeśli zdarzy się to w trakcie wyprzedaży, tracisz:
- nowych subskrybentów z zapisów przy kasie,
- dane o kliknięciach z maili o porzuconym koszyku,
- prośby o wypisanie, co może stanowić ryzyko prawne.
SaaS: onboarding bez przerw
Jeśli Twoja aplikacja wywołuje API NetSendo przy rejestracji użytkownika, nieaktualny upstream w nginx sprawia, że te wywołania po cichu się nie udają. Maile powitalne nie wychodzą, a nowi użytkownicy mają gorsze pierwsze wrażenie. W v2.11.1 API jest dostępne, gdy tylko nowy kontener wystartuje.
Agencje: aktualizacja wielu instalacji naraz
Jeśli prowadzisz NetSendo dla wielu klientów, awaria w 7 na 16 przypadków oznacza sprawdzanie i restartowanie serwerów jeden po drugim. Dzięki automatycznemu restartowi serwera WWW możesz aktualizować wszystkie instalacje skryptem, bez tej ręcznej rundy.
🛠️ Krok po kroku: aktualizacja do v2.11.1
-
Sprawdź wersję Compose
Uruchom
docker compose version. Opcjarestart: truedziała od wersji 2.17. Stary samodzielny programdocker-compose(v1) jej nie obsługuje. -
Zaktualizuj plik compose
Jeśli używasz standardowego
docker-compose.ymlz repozytorium, pobierz wersję z v2.11.1. Jeśli masz własny, zmodyfikowany plik, dodajrestart: truew sekcjidepends_on → appserwera WWW, jak w przykładzie powyżej. -
Pobierz obrazy i odtwórz kontenery
docker compose pull docker compose up -d -
Sprawdź działanie
Uruchom
docker compose psi sprawdź, czy czas działania serwera WWW zgadza się z czasem działania aplikacji. Potem otwórz panel. Jeśli nadal widzisz błędy 502, poszukaj komunikatu „connect() failed (111)” wdocker compose logs webserver. -
Rozwiązanie awaryjne dla własnych konfiguracji i Podmana
Jeśli nie możesz użyć nowej opcji, po każdej aktualizacji zrestartuj serwer WWW, zgodnie z README → Updates:
docker compose restart webserver
⚠️ Częsty błąd: Samo przeniesienie nowego tagu obrazu do własnego pliku compose nie usunie problemu. Poprawka jest w konfiguracji compose, a nie w obrazie, więc potrzebujesz też linii restart: true.
🎯 Wskazówki eksperckie
Zakończ skrypt aktualizacji poleceniem w rodzaju curl -fsS https://twoja-domena/ > /dev/null. Jeśli się nie powiedzie, cały skrypt zwróci błąd, więc o nieudanej aktualizacji dowiesz się od razu, a nie od użytkowników.
Zamiast edytować główny plik, umieść lokalne zmiany w docker-compose.override.yml. Wtedy poprawki takie jak ta dotrą do Ciebie, gdy pobierzesz główny plik.
Ponieważ podman-compose ignoruje restart: true, dodaj restart serwera WWW na końcu skryptu aktualizacji.
Nawet z tą poprawką aplikacja jest przez chwilę niedostępna, gdy kontener jest odtwarzany. Planuj aktualizacje poza godzinami wysyłki kampanii.
✅ Podsumowanie
v2.11.1 to małe wydanie, które usuwa realny problem. Ponieważ nginx ustalał adres aplikacji tylko raz, odtworzenie kontenera aplikacji po aktualizacji mogło sprawić, że serwer WWW wysyłał ruch pod adres, który już nie istniał. Dzięki restart: true w docker-compose.yml Docker Compose 2.17+ restartuje teraz serwer WWW razem z aplikacją.
Co zrobić:
- Upewnij się, że masz Docker Compose 2.17 lub nowszy.
- Użyj zaktualizowanego pliku compose albo dodaj
restart: truedo własnego. - Jeśli masz własny plik compose lub używasz Podmana, po każdej aktualizacji uruchom
docker compose restart webserver.
Szczegóły konfiguracji znajdziesz w dokumentacji. Aby połączyć NetSendo z innymi narzędziami, zajrzyj do integracji.
Gotowy na aktualizację?
Zaktualizuj NetSendo do v2.11.1, aby aktualizacje przebiegały bez błędów 502.


