9.1 Інструменти і команди для відлагодження
Docker Compose значно спрощує розробку і розгортання багатоконтейнерних додатків, але, як і з будь-якою технологією, можуть виникати проблеми, які потребують відлагодження і вирішення. У цій лекції ми розглянемо основні підходи і інструменти для пошуку помилок і відлагодження додатків у Docker Compose.
Основні проблеми і підходи до їх вирішення:
- Проблеми із запуском контейнерів:
- Перевірка логів контейнерів.
- Перевірка статусу контейнерів.
- Перевірка конфігураційних файлів.
- Мережеві проблеми:
- Перевірка мережевих підключень.
- Використання мережевих утиліт всередині контейнерів.
- Проблеми із томами:
- Перевірка монтування томів.
- Перевірка прав доступу до томів.
Інструменти і команди для відлагодження:
1. Перегляд логів контейнерів
Логи контейнерів — це перше місце, куди слід звернутися при виникненні проблем. Команда docker compose logs дозволяє переглядати логи всіх сервісів, визначених у compose.yaml.
docker compose logs
Ви можете вказати конкретний сервіс для перегляду його логів:
docker compose logs <service_name>
2. Перевірка статусу контейнерів
Команда docker compose ps відображає інформацію про статус усіх контейнерів, якими керує Docker Compose.
docker compose ps
Вивід цієї команди покаже стан, порти та ідентифікатори контейнерів.
3. Перезапуск контейнерів
Якщо контейнер працює некоректно, спробуйте його перезапустити:
docker compose restart <service_name>
4. Підключення до запущеного контейнера
Для більш детального вивчення проблеми можна підключитися до запущеного контейнера за допомогою команди docker compose exec.
docker compose exec <service_name> /bin/bash
Ця команда відкриє термінал всередині контейнера, що дозволить виконати діагностичні команди.
5. Використання мережевих утиліт
Перевірка мережевих підключень всередині контейнерів може допомогти у діагностиці проблем із мережею. Ви можете використовувати утиліти, такі як ping, curl, netcat та інші.
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 можуть призвести до некоректної роботи контейнерів. Перевірте синтаксис файлу за допомогою команди:
docker compose config
Ця команда перевірить файл на наявність помилок і виведе фінальну конфігурацію.
2. Використання Healthcheck
Ви можете визначити healthcheck для сервісів у compose.yaml, щоб Docker автоматично перевіряв стан контейнерів.
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. Перевірка монтування томів
Проблеми з томами можуть виникнути через некоректне монтування або недостатні права доступу. Переконайтеся, що томи монтуються правильно і контейнери мають доступ до них.
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
3.1 Перевірка доступності тому
Для перевірки доступності тому з контейнера, ви можете запустити контейнер і виконати команду, яка перевіряє наявність тому (наприклад, список файлів у томі). Припустімо, що том змонтовано в контейнері за шляхом /mnt/volume:
docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume
Якщо том доступний, команда ls виведе список файлів і директорій, які знаходяться у томі. Якщо том недоступний або порожній, ви отримаєте відповідне повідомлення.
3.2 Перевірка доступного місця у томі
Щоб перевірити, скільки місця доступно на томі зсередини контейнера, використовуйте команду df:
docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume
Вона відображає доступне місце на файловій системі, де змонтований том. Опція -h виводить інформацію у зручному для читання форматі (з одиницями вимірювання, такими як MB, GB тощо).
4. Використання IDE
Для спрощення відлагодження використовуйте IDE з увімкненими debug-функціями та логуванням. Ви можете створювати окремі файли конфігурацій для розробки та продакшна, використовуючи параметр --file.
docker compose --file docker-compose.dev.yml up
Важливо! Ось тут є корисна інструкція щодо налаштування віддаленого дебагу додатку, запущеного всередині Docker, через IntelliJ IDEA: Налаштування віддаленого дебагу .
5. Перевірка змінних середовища
Некоректні або відсутні змінні середовища можуть викликати проблеми. Переконайтеся, що всі необхідні змінні задані у файлі .env або безпосередньо у compose.yaml.
version: '3.8'
services:
app:
image: myapp:latest
environment:
- APP_ENV=development
- DEBUG=true
9.3 Приклади команд для налагодження
Приклади використання команд для налагодження
Приклад 1: Перевірка та виправлення помилки підключення до бази даних
Перегляд логів сервісу web:
docker compose logs web
Перевірка мережевого з'єднання між web і db:
docker compose exec web ping db
docker compose exec web curl http://db:5432
Підключення до контейнера web для діагностики:
docker compose exec web /bin/bash
Приклад 2: Перевірка проблем із томами
Перевірка монтування томів:
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Підключення до контейнера db та перевірка даних:
docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ