You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus升级后Testcontainers初始化报错java.lang.InterruptedException

问题描述

将Quarkus从2.4.0版本升级到2.15.0版本后,使用docker-compose运行Quarkus集成测试时遇到Postgres容器启动失败的错误,核心异常为java.lang.InterruptedException。尝试设置更长的超时值:

quarkus.devservices.timeout=180

但问题依旧存在,相关日志如下:

[2022-12-19T08:55:14.576Z] > Task :score-integrationtest:test
[2022-12-19T08:55:14.576Z]     2022-12-19 08:55:12,293 WARN  [org.ecl.jet.ser.AbstractConnector] (pool-2-thread-1) Acceptors should be <= availableProcessors: NetworkTrafficServerConnector@161ff9e6{HTTP/1.1, (http/1.1, h2c)}{0.0.0.0:0}
[2022-12-19T08:55:14.576Z]     2022-12-19 08:55:12,720 INFO  [org.ecl.jet.ser.Server] (pool-2-thread-1) jetty-9.4.49.v20220914; built: 2022-09-14T01:07:36.601Z; git: 4231a3b2e4cb8548a412a789936d640a97b1aa0a; jvm 17.0.1+12-LTS
[2022-12-19T08:55:14.576Z]     2022-12-19 08:55:12,803 INFO  [org.ecl.jet.ser.han.ContextHandler] (pool-2-thread-1) Started o.e.j.s.ServletContextHandler@64f54045{/__admin,null,AVAILABLE}
[2022-12-19T08:55:14.576Z]     2022-12-19 08:55:12,848 INFO  [org.ecl.jet.ser.han.Con.ROOT] (pool-2-thread-1) RequestHandlerClass from context returned com.github.tomakehurst.wiremock.http.StubRequestHandler. Normalized mapped under returned 'null'
[2022-12-19T08:55:14.576Z]     2022-12-19 08:55:12,856 INFO  [org.ecl.jet.ser.han.ContextHandler] (pool-2-thread-1) Started o.e.j.s.ServletContextHandler@5e9f3de4{/,null,AVAILABLE}
[2022-12-19T08:55:14.576Z]     2022-12-19 08:55:12,876 INFO  [org.ecl.jet.ser.AbstractConnector] (pool-2-thread-1) Started NetworkTrafficServerConnector@161ff9e6{HTTP/1.1, (http/1.1, h2c)}{0.0.0.0:9701}
[2022-12-19T08:55:14.576Z]     2022-12-19 08:55:12,877 INFO  [org.ecl.jet.ser.Server] (pool-2-thread-1) Started @30367ms
...
[2022-12-19T08:55:16.123Z]     2022-12-19 08:55:15,908 INFO  [🐳 .5]] (agroal-11) Creating container for image: postgres:14.5
[2022-12-19T08:55:16.423Z]     2022-12-19 08:55:16,106 INFO  [🐳 .5]] (agroal-11) Container postgres:14.5 is starting: 3225b3d78588be4297362f627043c39b27ddf5b1dd71438e153b2b5b4d07fc29
[2022-12-19T08:55:21.997Z]     2022-12-19 08:55:20,933 ERROR [🐳 .5]] (agroal-11) Could not start container: java.lang.RuntimeException: java.lang.InterruptedException
[2022-12-19T08:55:21.997Z]      at org.testcontainers.containers.output.WaitingConsumer.waitUntil(WaitingConsumer.java:105)
[2022-12-19T08:55:21.997Z]      at org.testcontainers.containers.output.WaitingConsumer.waitUntil(WaitingConsumer.java:78)
[2022-12-19T08:55:21.997Z]      at org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy.waitUntilReady(LogMessageWaitStrategy.java:45)
[2022-12-19T08:55:21.997Z]      at org.testcontainers.containers.wait.strategy.AbstractWaitStrategy.waitUntilReady(AbstractWaitStrategy.java:52)
[2022-12-19T08:55:21.997Z]      at org.testcontainers.containers.PostgreSQLContainer.waitUntilContainerStarted(PostgreSQLContainer.java:143)
[2022-12-19T08:55:21.997Z]      at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:485)
[2022-12-19T08:55:21.997Z]      at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:344)
[2022-12-19T08:55:21.997Z]      at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
[2022-12-19T08:55:21.997Z]      at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:334)
[2022-12-19T08:55:21.997Z]      at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:322)
[2022-12-19T08:55:21.997Z]      at org.testcontainers.jdbc.ContainerDatabaseDriver.connect(ContainerDatabaseDriver.java:124)
[2022-12-19T08:55:21.997Z]      at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:226)
[2022-12-19T08:55:21.997Z]      at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:535)
[2022-12-19T08:55:21.997Z]      at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:516)
[2022-12-19T08:55:21.997Z]      at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[2022-12-19T08:55:21.997Z]      at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:75)
[2022-12-19T08:55:21.997Z]      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
[2022-12-19T08:55:21.997Z]      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[2022-12-19T08:55:21.997Z]      at java.base/java.lang.Thread.run(Thread.java:833)
[2022-12-19T08:55:21.997Z]     Caused by: java.lang.InterruptedException
[2022-12-19T08:55:21.997Z]      at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679)
[2022-12-19T08:55:21.997Z]      at java.base/java.util.concurrent.LinkedBlockingDeque.pollLast(LinkedBlockingDeque.java:533)
[2022-12-19T08:55:21.997Z]      at org.testcontainers.containers.output.WaitingConsumer.waitUntil(WaitingConsumer.java:85)
[2022-12-19T08:55:21.997Z]      ... 18 more
解决方案
  • 调整Testcontainers超时设置:quarkus.devservices.timeout只作用于Quarkus DevServices自动管理的容器,而这里是Testcontainers直接启动Postgres,需要设置Testcontainers的超时。可以通过系统属性添加:
    testcontainers.wait.timeout=300
    
    或者在代码中配置PostgreSQLContainer的等待超时:
    PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:14.5")
        .withStartupTimeout(Duration.ofSeconds(300));
    
  • 检查Testcontainers版本兼容性:Quarkus 2.15.0默认依赖的Testcontainers版本可能和你项目中手动引入的版本冲突,确认项目中Testcontainers版本与Quarkus bom中定义的版本一致,避免兼容性问题。
  • 修改容器等待策略:日志等待策略可能因为Postgres启动日志格式变化导致识别失败,改用端口等待策略:
    postgres.setWaitStrategy(new WaitStrategy() {
        @Override
        public void waitUntilReady(GenericContainer container) {
            new HostPortWaitStrategy().withStartupTimeout(Duration.ofSeconds(300)).waitUntilReady(container);
        }
    });
    
  • 检查Docker资源限制:Docker分配的内存、CPU不足会导致Postgres启动缓慢,触发中断。进入Docker设置,增加内存(建议至少4GB)和CPU核心数。
  • 手动排查容器启动问题:直接在本地运行docker run postgres:14.5,查看容器日志是否有初始化错误,比如权限问题、存储空间不足等,排除镜像本身的问题。

内容的提问来源于stack exchange,提问作者Chexpir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:40:41