9.1 Narzędzia i polecenia do debugowania
Docker Compose znacznie upraszcza rozwój i wdrażanie aplikacji wielokontenerowych, ale, jak w przypadku każdej technologii, mogą wystąpić problemy wymagające debugowania i naprawy. W tym wykładzie przeanalizujemy podstawowe podejścia i narzędzia do szukania błędów i debugowania aplikacji w Docker Compose.
Podstawowe problemy i podejścia do ich rozwiązania:
- Problemy z uruchamianiem kontenerów:
- Sprawdzanie logów kontenerów.
- Sprawdzanie statusu kontenerów.
- Sprawdzanie plików konfiguracyjnych.
- Problemy sieciowe:
- Sprawdzanie połączeń sieciowych.
- Używanie narzędzi sieciowych wewnątrz kontenerów.
- Problemy z wolumenami:
- Sprawdzanie montowania wolumenów.
- Sprawdzanie praw dostępu do wolumenów.
Narzędzia i polecenia do debugowania:
1. Podgląd logów kontenerów
Logi kontenerów to pierwsze miejsce, które należy sprawdzić w przypadku wystąpienia problemów. Polecenie docker compose logs
pozwala przeglądać logi wszystkich usług zdefiniowanych w compose.yaml
.
docker compose logs
Możesz wskazać konkretną usługę, aby zobaczyć tylko jej logi:
docker compose logs <service_name>
2. Sprawdzanie statusu kontenerów
Polecenie docker compose ps
wyświetla informacje o statusie wszystkich kontenerów zarządzanych przez Docker Compose.
docker compose ps
Wynik tego polecenia pokaże stan, porty i identyfikatory kontenerów.
3. Ponowne uruchamianie kontenerów
Jeśli kontener działa nieprawidłowo, spróbuj go zrestartować:
docker compose restart <service_name>
4. Połączenie z działającym kontenerem
Aby bardziej szczegółowo przeanalizować problem, możesz połączyć się z działającym kontenerem za pomocą polecenia docker compose exec
.
docker compose exec <service_name> /bin/bash
To polecenie otworzy terminal wewnątrz kontenera, co pozwoli na uruchamianie poleceń diagnostycznych.
5. Używanie narzędzi sieciowych
Sprawdzanie połączeń sieciowych wewnątrz kontenerów może pomóc w diagnostyce problemów z siecią. Możesz użyć narzędzi takich jak ping, curl, netcat i inne.
docker compose exec <service_name> ping <hostname>
docker compose exec <service_name> curl http://<hostname>
docker compose exec <service_name> netcat -z -v <hostname> <port>
9.2 Zaawansowane podejścia
Dodatkowe podejścia do znajdowania błędów
1. Sprawdzanie pliku Docker Compose
Błędy w pliku compose.yaml
mogą prowadzić do nieprawidłowego działania kontenerów. Sprawdź składnię pliku za pomocą komendy:
docker compose config
Ta komenda sprawdzi plik pod kątem błędów i wyświetli końcową konfigurację.
2. Użycie Healthcheck
Możesz określić healthcheck dla usług w compose.yaml
, aby Docker automatycznie sprawdzał stan kontenerów.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
interval: 30s
timeout: 10s
retries: 3
3. Sprawdzanie montowania woluminów
Problemy z woluminami mogą wystąpić z powodu nieprawidłowego montowania lub niewystarczających uprawnień. Upewnij się, że woluminy są poprawnie zamontowane i kontenery mają do nich dostęp.
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
3.1 Sprawdzanie dostępności woluminu
Aby sprawdzić dostępność woluminu z kontenera, możesz uruchomić kontener i wykonać polecenie, które sprawdzi obecność woluminu (np. lista plików w woluminie). Przyjmijmy, że wolumin jest zamontowany w kontenerze pod ścieżką /mnt/volume:
docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume
Jeśli wolumin jest dostępny, komenda ls
wyświetli listę plików i katalogów znajdujących się w woluminie. Jeśli wolumin jest niedostępny lub pusty, otrzymasz odpowiednią wiadomość.
3.2 Sprawdzanie dostępnej przestrzeni w woluminie
Aby sprawdzić, ile miejsca jest dostępnego na woluminie z wnętrza kontenera, użyj polecenia df
:
docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume
Wyświetla ono dostępną przestrzeń na systemie plików, gdzie wolumin jest zamontowany. Opcja -h
wyświetla informacje w formacie łatwym do odczytania (z jednostkami, takimi jak MB, GB itd.).
4. Użycie IDE
Aby uprościć debugowanie, używaj IDE z włączonymi funkcjami debugowania i logowania. Możesz tworzyć osobne pliki konfiguracyjne dla środowiska developerskiego i produkcyjnego, używając parametru --file
.
docker compose --file docker-compose.dev.yml up
Ważne!
Tutaj znajduje się przydatna instrukcja dotycząca konfiguracji zdalnego debugowania aplikacji uruchomionej wewnątrz Dockera, przez IntelliJ IDEA: Konfiguracja zdalnego debugowania .
5. Sprawdzanie zmiennych środowiska
Nieprawidłowe lub brakujące zmienne środowiska mogą powodować problemy. Upewnij się, że wszystkie wymagane zmienne są ustawione w pliku .env
lub bezpośrednio w compose.yaml
.
version: '3.8'
services:
app:
image: myapp:latest
environment:
- APP_ENV=development
- DEBUG=true
9.3 Przykłady poleceń do debugowania
Przykłady użycia poleceń do debugowania
Przykład 1: Sprawdzanie i naprawianie błędu połączenia z bazą danych
Przegląd logów serwisu web
:
docker compose logs web
Sprawdzanie połączenia sieciowego między web
i db
:
docker compose exec web ping db
docker compose exec web curl http://db:5432
Połączenie do kontenera web
w celu diagnostyki:
docker compose exec web /bin/bash
Przykład 2: Sprawdzanie problemów z wolumenami
Sprawdzanie montowania wolumenów:
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Połączenie do kontenera db
i sprawdzanie danych:
docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
GO TO FULL VERSION