0

我怎么知道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>

目前 IT 开始执行,而 RabbitMQ 它仍在初始化并且由于服务器不可用而失败。

4

2 回答 2

1

我设法找到了一种更自信的方法来检查 RabbitMQ 的状态。当我使用rabbitmq:3.6.10-managementdocker 映像时,我可以检查管理 URL 是否localhost:15672已启动:

<wait>
    <http>
        <url>http://localhost:15672</url>
        <method>GET</method>
        <status>200..399</status>
    </http>
    <time>10000</time>
</wait>

配置会检查获取管理 url的wait返回值,最长 10 秒,直到它在指定的 HTTP 响应状态范围内,但 RabbitMQ 通常在 2 到 3 秒内启动。

于 2017-08-09T13:09:12.990 回答
1

“在启动容器时,可以阻止执行直到满足某些条件”

https://dmp.fabric8.io/#start-wait

您可以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.

于 2017-08-04T12:24:37.733 回答