Ожидание запуска docker-контейнера RabbitMQ с помощью docker-maven-plugin
Как я могу сказать docker-maven-plugin
подождать, пока контейнер RabbitMQ полностью запустится, прежде чем запускать интеграционные тесты?
Это конфигурация плагина, которую я использую в pom.xml
:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<executions>
<execution>
<id>start-rabbitmq-container</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<images>
<image>
<alias>rabbitmq</alias>
<name>rabbitmq:3.6.10-management</name>
<run>
<log>
<prefix>RABBITMQ</prefix>
<color>cyan</color>
</log>
<namingStrategy>alias</namingStrategy>
<ports>
<port>5672:5672</port>
<port>15672:15672</port>
</ports>
</run>
</image>
</images>
</configuration>
</execution>
<execution>
<id>stop-rabbitmq-container</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
В настоящий момент ИТ-службы начинают работать, пока RabbitMQ все еще инициализируется и дает сбой, поскольку сервер недоступен.
2 ответа
Мне удалось найти более настойчивый способ проверки статуса RabbitMQ. Как я использую rabbitmq:3.6.10-management
Изображение докера, я могу проверить, что URL управления на localhost:15672
вверх:
<wait>
<http>
<url>http://localhost:15672</url>
<method>GET</method>
<status>200..399</status>
</http>
<time>10000</time>
</wait>
wait
Конфигурация будет проверять возвращаемое значение получения URL-адреса управления не более 10 секунд, пока он не попадет в указанный диапазон состояний ответа HTTP, но RabbitMQ обычно запускается в течение 2-3 секунд.
"При запуске контейнера возможно заблокировать выполнение, пока не будет выполнено какое-то условие"
Вы можете wait
для некоторого вывода журнала из контейнера RabbitMQ с log
:
Regular expression which is applied against the log output of an container and blocks until the pattern is matched. You can use (?s) in the pattern to switch on multi line matching.