Як виправити помилку тайм-ауту з'єднання при локальному запуску мікросервісів через Docker Compose?

Відповідь

Помилка тайм-ауту з'єднання між контейнерами в Docker Compose зазвичай виникає через те, що один сервіс намагається звернутися до іншого до того, як той повністю ініціалізувався та почав приймати вхідні мережеві запити. Наприклад, веб-додаток може спробувати підключитися до бази даних занадто рано, коли СУБД ще здійснює внутрішню міграцію або запуск.

Щоб вирішити цю проблему, необхідно правильно налаштувати порядок запуску сервісів та механізм перевірки їхньої готовності. У файлі конфігурації docker-compose.yml використовується спеціальна директива, яка вказує залежності між контейнерами.

Відкрийте файл конфігурації docker-compose.yml у текстовому редакторі.
Знайдіть проблемний сервіс-клієнт і додайте секцію depends_on із зазначенням сервісу-сервера.
Додайте в конфігурацію сервера блок healthcheck для перевірки реальної готовності додатку.

Перевірка здоров'я контейнера дозволяє Docker розуміти не просто факт запуску процесу, а саме готовність додатку до роботи. У блоці healthcheck прописується команда перевірки, наприклад, виконання запиту до бази даних або пінг HTTP-ендпоінту, а також інтервали повторення.

Додатково в клієнтському сервісі можна використовувати сторонні утиліти очікування готовності порту або написати скрипт мовою програмування, який реалізує шаблон повторних спроб підключення з експоненціальною затримкою. Такий підхід повністю виключає помилки тайм-ауту на етапі ініціалізації складного оточення.

Чи корисна ця відповідь?

Інші питання цієї теми

Пов’язані питання з інших тем