JavaRush /Курсы /Модуль 2: Fullstack /Отладка приложений в Docker Compose

Отладка приложений в Docker Compose

Модуль 2: Fullstack
14 уровень , 8 лекция
Открыта

9.1 Инструменты и команды для отладки

Docker Compose значительно упрощает разработку и развертывание многоконтейнерных приложений, но, как и с любой технологией, могут возникать проблемы, требующие отладки и решения. В этой лекции мы рассмотрим основные подходы и инструменты для поиска ошибок и отладки приложений в Docker Compose.

Основные проблемы и подходы к их решению:

  1. Проблемы с запуском контейнеров:
    • Проверка логов контейнеров.
    • Проверка статуса контейнеров.
    • Проверка конфигурационных файлов.
  2. Сетевые проблемы:
    • Проверка сетевых подключений.
    • Использование сетевых утилит внутри контейнеров.
  3. Проблемы с томами:
    • Проверка монтирования томов.
    • Проверка прав доступа к томам.

Инструменты и команды для отладки:

1. Просмотр логов контейнеров

Логи контейнеров — это первое место, куда следует обратиться при возникновении проблем. Команда docker compose logs позволяет просматривать логи всех сервисов, определённых в compose.yaml.

Terminal

docker compose logs

Вы можете указать конкретный сервис для просмотра его логов:

Terminal

docker compose logs <service_name>

2. Проверка статуса контейнеров

Команда docker compose ps отображает информацию о статусе всех контейнеров, управляемых Docker Compose.

Terminal

docker compose ps

Вывод этой команды покажет состояние, порты и идентификаторы контейнеров.

3. Перезапуск контейнеров

Если контейнер работает некорректно, попробуйте его перезапустить:

Terminal

docker compose restart <service_name>

4. Подключение к работающему контейнеру

Для более детального исследования проблемы можно подключиться к работающему контейнеру с помощью команды docker compose exec.

Terminal

docker compose exec <service_name> /bin/bash

Эта команда откроет терминал внутри контейнера, что позволит выполнить диагностические команды.

5. Использование сетевых утилит

Проверка сетевых подключений внутри контейнеров может помочь в диагностике проблем с сетью. Вы можете использовать утилиты, такие как ping, curl, netcat и другие.

Terminal

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 Продвинутые подходы

Дополнительные подходы к поиску ошибок

1. Проверка Docker Compose файла

Ошибки в файле compose.yaml могут привести к некорректной работе контейнеров. Проверьте синтаксис файла с помощью команды:

Terminal

docker compose config

Эта команда проверит файл на наличие ошибок и выведет итоговую конфигурацию.

2. Использование Healthcheck

Вы можете определить healthcheck для сервисов в compose.yaml, чтобы Docker автоматически проверял состояние контейнеров.

Yaml

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. Проверка монтирования томов

Проблемы с томами могут возникнуть из-за некорректного монтирования или недостаточных прав доступа. Убедитесь, что тома монтируются правильно и контейнеры имеют доступ к ним.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

3.1 Проверка доступности тома

Для проверки доступности тома из контейнера, вы можете запустить контейнер и выполнить команду, которая проверяет наличие тома (например, список файлов в томе). Предположим, что том монтирован в контейнере по пути /mnt/volume:

Terminal

docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume

Если том доступен, команда ls выведет список файлов и директорий, находящихся в томе. Если том недоступен или пуст, вы получите соответствующее сообщение.

3.2 Проверка доступного места в томе

Чтобы проверить, сколько места доступно на томе изнутри контейнера, используйте команду df:

Terminal

docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume

Она отображает доступное место на файловой системе, где смонтирован том. Опция -h выводит информацию в удобном для чтения формате (с единицами измерения, такими как MB, GB и т.д.).

4. Использование IDE

Для упрощения отладки используйте IDE с включенными дебаг-функциями и логгированием. Вы можете создавать отдельные файлы конфигурации для разработки и производства, используя параметр --file.

Terminal

docker compose --file docker-compose.dev.yml up

Важно! Вот здесь есть полезная инструкция по настройке удалённого дебага приложения, запущенного внутри Docker, через IntelliJ IDEA: Настройка удаленного дебага .

5. Проверка переменных окружения

Некорректные или отсутствующие переменные окружения могут вызвать проблемы. Убедитесь, что все необходимые переменные заданы в файле .env или непосредственно в compose.yaml.

Yaml

version: '3.8'

services:
  app:
    image: myapp:latest
    environment:
      - APP_ENV=development
      - DEBUG=true

9.3 Примеры команд для отладки

Примеры использования команд для отладки

Пример 1: Проверка и исправление ошибки подключения к базе данных

Просмотр логов сервиса web:

Terminal

docker compose logs web

Проверка сетевого соединения между web и db:

Terminal

docker compose exec web ping db
docker compose exec web curl http://db:5432

Подключение к контейнеру web для диагностики:

Terminal

docker compose exec web /bin/bash

Пример 2: Проверка проблем с томами

Проверка монтирования томов:

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data
    
volumes:
  db-data:

Подключение к контейнеру db и проверка данных:

Terminal

docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
3
Задача
Модуль 2: Fullstack, 14 уровень, 8 лекция
Недоступна
Проверка логов сервиса
Проверка логов сервиса
3
Задача
Модуль 2: Fullstack, 14 уровень, 8 лекция
Недоступна
Проверка сетевого соединения
Проверка сетевого соединения
3
Задача
Модуль 2: Fullstack, 14 уровень, 8 лекция
Недоступна
Проверка монтирования томов
Проверка монтирования томов
3
Задача
Модуль 2: Fullstack, 14 уровень, 8 лекция
Недоступна
Использование Healthcheck
Использование Healthcheck
1
Опрос
Масштабирование сервисов, 14 уровень, 8 лекция
Недоступен
Масштабирование сервисов
Масштабирование сервисов
Комментарии (5)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Андрей Уровень 44
16 ноября 2025
Проверка монтирования томов: # Запуск контейнеров docker compose up # Пауза для ожидания запуска контейнера sleep 15 # Подключение и проверка данных docker compose exec db psql -U exampleuser -d exampledb -c "CREATE TABLE IF NOT EXISTS test_table (id SERIAL PRIMARY KEY, name TEXT);" docker compose exec db psql -U exampleuser -d exampledb -c "INSERT INTO test_table (name) VALUES ('test_entry');" # Остановка контейнеров после проверки docker compose down docker compose up -d sleep 10 docker compose exec db psql -U exampleuser -d exampledb -c "SELECT * FROM test_table;" | grep -q "test_entry" && echo "OK" || (echo "FAIL"; exit 1) docker compose down -v
Slevin Уровень 64
8 октября 2025
Весь уровень полная параша: - лекции пустые, ничерта не объясняют, не объясняют того чего требуется затем в задачах. Рассказывают вообще про что-то свое - задачи требует того чего нам не рассказывали - задачи требует написание "путей" которые нам не даны, вы типа должны доказаться какая моча ударит в голову валидатору при проверке пути. ЕСЛИ вам повезет - он в ошибке подскажет на что исправить, если нет - гадайте дальше у вас же полно времени! - другие же задачи, просто требуют скопировать код из лекции без всякого понимания, что это, как работает и зачем нужно. Всё это надо переписывать и переделывать. Это полный мусор.
Alexander Zarzhitski Уровень 24
12 ноября 2025
Абсолютно согласен! Надо требовать возврата денег.
Slevin Уровень 64
8 октября 2025
Монтирование тома должно происходить в директорию данных PostgreSQL внутри контейнера (обычно /var/lib/postgresql/data) И откуда я должен знать, что именно этот путь ожидает ваш валидатор?!
Askhad1994 Уровень 19
7 августа 2025
В разделе 3.1 Проверка доступности тома, если тома не существует то он создаст его.