docker logs pokazuje to, co kontener wypisał na standardowe wyjście (stdout) i wyjście błędów (stderr). To pierwsze miejsce, do którego zaglądasz, gdy aplikacja w kontenerze nie wstaje, restartuje się w kółko albo zachowuje się dziwnie. Nie musisz wchodzić do środka przez docker exec ani grzebać w plikach — komenda wyciąga zebrane logi prosto z demona Dockera i wrzuca je do twojego terminala. Działa tak samo na Linuksie, macOS i Windowsie, bo to po prostu klient gadający z silnikiem Dockera.
Składnia i najważniejsze opcje
Podstawowa forma to: docker logs [OPCJE] KONTENER, gdzie KONTENER to nazwa albo ID (wystarczy kilka pierwszych znaków).
-f,--follow— strumieniuje logi na żywo, dopisując nowe linie w miarę ich pojawiania się (jaktail -f). Przerywasz przez Ctrl+C.--tail N— pokazuje tylko ostatnie N linii zamiast całej historii. Domyślnie jestall, czyli wszystko.-t,--timestamps— dokleja do każdej linii znacznik czasu w formacie RFC3339Nano.--since— tylko logi od podanego momentu: data RFC3339, uniksowy timestamp albo czas względny typu10m,2h.--until— logi do podanego momentu (ten sam format co--since); razem dają okno czasowe.--details— dorzuca dodatkowe atrybuty dołączone przez--log-optprzy tworzeniu kontenera.-n— krótki alias dla--tail.
Przykłady użycia
docker logs nginx— wypluwa całą dotychczasową historię logów kontenera o nazwie nginx.docker logs -f --tail 100 api— pokazuje ostatnie 100 linii i zostaje, śledząc nowe wpisy na żywo. Najczęstszy wariant przy debugowaniu.docker logs -t --since 15m worker— logi z ostatnich 15 minut, każda linia ze znacznikiem czasu.docker logs --since 2026-06-29T08:00:00 --until 2026-06-29T09:00:00 db— wycina dokładne okno godzinne, idealne gdy wiesz mniej więcej kiedy coś się wywaliło.docker logs app 2>/dev/null— pokazuje tylko stdout, odsiewając stderr (logi lecą na oba strumienie, więc czasem chcesz je rozdzielić).
Częste błędy i pułapki
Najważniejsza pułapka: docker logs działa tylko ze sterownikami logowania json-file (domyślny), local oraz journald. Jeśli kontener pisze przez syslog, gelf czy fluentd, dostaniesz błąd, że sterownik nie wspiera odczytu — logów szukaj wtedy w docelowym systemie.
Druga sprawa: jeśli aplikacja loguje do pliku wewnątrz kontenera zamiast na stdout/stderr, ta komenda nic nie pokaże — Docker widzi tylko strumienie procesu o PID 1. Pusty wynik to nie zawsze brak logów, czasem zła konfiguracja aplikacji.
Uważaj też na rozmiar: bez --tail na długo żyjącym kontenerze możesz dostać setki tysięcy linii i zapchać terminal. A domyślny sterownik json-file bez ustawionej rotacji (max-size, max-file) potrafi po cichu zjeść dysk.
Powiązane komendy: docker ps (znajdź nazwę/ID kontenera), docker exec (wejście do środka), docker inspect (konfiguracja i sterownik logów), docker compose logs (logi wielu usług naraz), docker events (zdarzenia demona).