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 з увімкненими debug-функціями та логуванням. Ви можете створювати окремі файли конфігурацій для розробки та продакшна, використовуючи параметр --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
1
Опитування
Масштабування сервісів, рівень 14, лекція 8
Недоступний
Масштабування сервісів
Масштабування сервісів
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ