Mateusz Stanek

Terminal z błędami Docker Compose i ikoną zapomnianej instancji PostgreSQL na porcie 5432

Moja pierwsza walka z Dockerem, czyli jak spędziłem 2 godziny szukając błędu, którego nie było

Są technologie, które mijasz latami i myślisz sobie “dobra, kiedyś”. Dla mnie takim byłym zaległym tematem był Docker. Nie dlatego, że nie rozumiałem po co — po prostu w codziennej pracy nigdy nie był potrzebny.

Skąd ten projekt?

W pracy od lat działamy na Azure. VM-ki, App Service, bazy danych jako serwisy zarządzane. Wszystko stabilne, sprawdzone, dobrze skonfigurowane. Docker zawsze był gdzieś na horyzoncie — widać go w tutorialach, w repozytoriach, w ofertach pracy — ale u nas po prostu nie pasował do układanki. Nasze aplikacje działają jako standardowe serwisy i nigdy nie mieliśmy powodu, żeby to zmieniać.

Ale rynek się zmienia. Oczekiwania się zmieniają. I powiem szczerze — nie chciałem być osobą, która patrzy na docker-compose.yml i nie wie od czego zacząć.

Padło więc na projekt poboczny. Mam bloga — tego, który właśnie czytasz — i od jakiegoś czasu zbiera się tam spam w komentarzach. Usuwanie go ręcznie w 2025 roku to czyste marnotrawstwo czasu. Postanowiłem zautomatyzować cały proces i przy okazji postawić sobie coś w pełni skonteneryzowanego.

Stack i plan

Projekt prosty w założeniu: aplikacja webowa do zarządzania komentarzami, baza PostgreSQL, i Ollama z lokalnym modelem językowym do oceniania — spam czy nie spam. Wszystko w Docker Compose, wszystko odizolowane, ładne i schludne.

Zabrałem się do roboty. Skonfigurowałem docker-compose.yml, napisałem trochę kodu do inicjalizacji bazy i połączenia testowego z LLM-em. Podnoszę całość.

Coś nie działa.

Ollama śmiga. Postgres nie.

Zacząłem od klasyki — odpalenia każdego kontenera osobno. Ollama działa od pierwszego uruchomienia. Serio, bez żadnych niespodzianek. Postgres — tu zaczęły się schody.

Aplikacja wyrzucała błędy połączenia, ale w trochę dziwnym miejscu. Nie tam, gdzie bym się spodziewał przy typowej misconfiguracji. Zacząłem kopać.

Sprawdziłem zmienne środowiskowe. Dobre. Sprawdziłem hasła i nazwy użytkowników. Poprawne. Sprawdziłem, czy kontener w ogóle startuje — startował. Sprawdziłem logi Postgresa wewnątrz kontenera — żadnych błędów. Wszystko wyglądało idealnie, a nic nie działało.

Minęła godzina. Potem półtorej.

Pamięć krótka, port ten sam

Gdzieś przy dwóch godzinach kliknęło.

Jakieś sześć lat temu, w poprzedniej pracy, stawiałem Postgresa lokalnie do testów. Inne dane logowania, inne hasło — ale port? Standardowy. 5432. I ta instancja — zapomniana, cicha, z 2018 roku — wciąż siedziała sobie na moim laptopie.

Aplikacja łączyła się z kontenerem. Poprawnie. Natomiast ja przez dwie godziny próbowałem zrozumieć błędy, które wynikały z konfiguracji tej starej, standalone’owej instancji, z którą nic w projekcie nie miało się łączyć.

Zero bugów w kodzie. Zero problemów z Dockerem. Tylko maszyna z historią i programista z wybiórczą pamięcią.

Czego mnie to nauczyło

Po pierwsze — zanim zaczniesz debugować nowe narzędzie, sprawdź, czy przypadkiem stare środowisko nie kłuje cię w plecy.

Po drugie — Docker jako taki okazał się znacznie mniej straszny, niż myślałem. Ollama stanęła bez żadnej konfiguracji, Compose działa intuicyjnie, izolacja środowisk naprawdę robi robotę.

Po trzecie — takie wpadki to nie powód do wstydu. To są po prostu koszty wchodzenia na nowe terytorium z bagażem wielu lat pracy na innych stackach. Każdy senior developer ma tę listę “głupich błędów” — różnica polega na tym, że senior wie, gdzie ich szukać. A ja właśnie zaktualizowałem swoją listę o port 5432.

Co dalej?

Projekt idzie do przodu. Zostało mi ogarnięcie debugowania Docker Compose z poziomu VS Code — ale po tej przygodzie podchodzę do tego już ze znacznie spokojniejszą głową.

Docker to coś, w co warto było zainwestować czas. Żałuję tylko, że nie zrobiłem tego wcześniej. Ale może właśnie teraz był najlepszy moment — mam konkretny problem do rozwiązania, a to zawsze najlepszy nauczyciel.

No related posts.

19 maja 2026 Bez kategorii
No Comments

GitHub Copilot a zmiana licencji AutoMapper — ukryte ryzyko prawne

Dodaj komentarz Anuluj pisanie odpowiedzi

Zobacz

  • Mateusz Stanek o mnie
Mateusz Stanek

Zaprzyjaźnione blogi

SGDev.pl

Ostatnie wpisy

  • Moja pierwsza walka z Dockerem, czyli jak spędziłem 2 godziny szukając błędu, którego nie było
  • GitHub Copilot a zmiana licencji AutoMapper — ukryte ryzyko prawne
  • Rola Prelegent
  • Elektronika – powrót do starego hobby
  • Badger2040

Najnowsze komentarze

  • Lukas L - Podsumowanie roku 2022
  • Oktawian Kurzynski - Enumeracja – wartość domyślna
  • Mateusz Stanek - Typy generyczne
  • Ola - Enumeracja – wartość domyślna
  • Typy generyczne w języku C# nie są 'rozwiązywane' w czasie kompilacji - Typy generyczne

Archiwa

  • maj 2026
  • marzec 2025
  • marzec 2023
  • luty 2023
  • styczeń 2023
  • grudzień 2022
  • marzec 2018
  • luty 2018
  • kwiecień 2017
  • marzec 2017
  • luty 2017

Kategorie

  • Bez kategorii
  • DSP2017
  • Elektronika
  • MiroBurn Challange
  • Narzędzia
  • Podsumowanie
  • Produktywność
  • Programowanie
  • Projekt
  • Prywatne
  • Rok 2023
  • Tips

Ostatnie wpisy

  • Moja pierwsza walka z Dockerem, czyli jak spędziłem 2 godziny szukając błędu, którego nie było
  • GitHub Copilot a zmiana licencji AutoMapper — ukryte ryzyko prawne
  • Rola Prelegent
  • Elektronika – powrót do starego hobby
  • Badger2040
Dumnie wspierane przez WordPressa | Motyw: Neblue by NEThemes.
Ta strona korzysta z ciasteczek aby świadczyć usługi na najwyższym poziomie. Dalsze korzystanie ze strony oznacza, że zgadzasz się na ich użycie.Zgoda
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Necessary
Always Enabled
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Non-necessary
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
SAVE & ACCEPT