Похоже, у вас возникла проблема с синхронизацией, когда ваши тесты пытаются получить доступ к сервисам до того, как ваше тестовое устройство достигнет точки, когда сервисы будут доступны. (Это может быть что-то вроде приложения узла с HTTP-сервером, который прослушивает запросы API, например.)
Когда вы делаете docker-compose up -d
, процесс docker-compose завершается до того, как внутри контейнерных сервисов будут созданы их сокеты и начнется прослушивание соединений. Это означает, что если следующее, что вы делаете, это запускаете свои тесты, которые пытаются открыть соединение со службами, запущенными docker-compose, возникает условие состязания, когда служба еще может быть недоступна.
Вам нужно будет выполнить тест, чтобы при попытке открыть соединение, если он обнаружил тайм-аут, он повторяет попытку несколько раз (достаточно времени и попыток, чтобы ваши контейнеры достигли состояния, в котором они прослушивают). и готовы обслуживать запросы, прежде чем сдаться.)
Обычно вы можете просто иметь простое автономное приложение, которое неоднократно пытается открыть сервисный порт и возвращает успех в случае успеха (или повторяет попытку, если время ожидания достигает некоторого максимума, когда возвращается ошибка). Вставьте это перед запуском тестов, чтобы убедиться, что ваши сервисы достигли состояния прослушивания.
Я настоятельно рекомендую прочитать Docker Compose: ждать зависимостей
В этой статье описывается симпатичный маленький образ docker, который вы можете использовать, который будет неоднократно пытаться открыть порт TCP, пока он не преуспеет. Вы можете использовать его для синхронизации вашего теста с сервисами тестового оборудования, которые требуются для теста.