Testcontainers Cloud试用出现too many concurrent requests错误求助
问题
在构建容器时使用Testcontainers运行Maven测试,因构建容器内无Docker runtime改用Testcontainers Cloud试用账户,使用的Dockerfile如下:
FROM maven:3.9-eclipse-temurin-19 AS build COPY src /home/app/src COPY pom.xml /home/app ENV TC_CLOUD_TOKEN=<MY TOKEN> RUN curl -fsSL https://app.testcontainers.cloud/bash | bash RUN cp ~/.testcontainers.properties /root/.testcontainers.properties RUN mvn -f /home/app/pom.xml clean package
执行时触发too many concurrent requests错误,关键日志片段如下:
2023-06-02T03:30:58.637Z --- INF Unable to obtain a lease body="{\"title\":\"Too many leases active on cluster for user\",\"status\":429}" status=429 ERROR: too many concurrent requests 2023-06-02T03:32:23.043Z --- FTL Timed out waiting for agent to be running addr=127.0.0.1:42289 Error response from daemon: The command '/bin/sh -c curl -fsSL https://app.testcontainers.cloud/bash | bash' returned a non-zero code: 1
需要限制并发请求,确保单个测试能在试用版环境正常运行。
解决方案
1. 强制Maven单线程执行测试
Maven默认并行执行测试,会同时创建多个Testcontainers实例,触发试用版并发限制。修改Maven打包命令,强制单线程运行:
RUN mvn -f /home/app/pom.xml clean package -DforkCount=0 -DreuseForks=false
forkCount=0:测试在Maven进程内运行,不创建新fork,确保单线程reuseForks=false:不重用fork进程,避免意外并发
2. 配置Testcontainers Cloud最大并行容器数
在testcontainers.properties中添加参数,限制同时运行的容器数量为1:
在Dockerfile中插入以下配置步骤:
# 在复制properties文件后添加并发限制配置 RUN echo "testcontainers.cloud.max-parallel-containers=1" >> /root/.testcontainers.properties
该参数强制Testcontainers同时只启动一个容器,避免触发试用版的并发请求限制。
3. 禁用JUnit 5并行测试(若适用)
如果测试基于JUnit 5编写,在pom.xml中配置Maven Surefire插件,关闭并行执行:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <properties> <configurationParameters> junit.jupiter.execution.parallel.enabled=false </configurationParameters> </properties> </configuration> </plugin> </plugins> </build>
确保测试类串行执行,减少对Testcontainers Cloud的并发请求。
4. 确保Agent完全启动后再运行测试
修改Dockerfile中Agent的安装命令,添加等待逻辑,避免Agent未就绪导致的重复请求:
# 替换原Agent安装命令,添加启动等待 RUN curl -fsSL https://app.testcontainers.cloud/bash | bash && \ until tcc-agent status | grep -q "Running"; do sleep 2; done
等待Agent进入运行状态后再执行测试,减少无效请求占用并发额度。
内容的提问来源于stack exchange,提问作者user3908406
相关产品推荐
相关产品推荐

