使用Testcontainers启动Couchbase企业版7.1.4镜像时随机报错求助
解决Testcontainers启动Couchbase 7.1.4企业版随机失败问题
针对启动时随机出现的ContainerLaunchException(根因为EOFException: \n not found),以下是几个实用的解决方向:
1. 补充容器资源配置
Couchbase企业版启动对内存、CPU要求较高,资源不足易导致启动流程中断,引发流读取异常。给容器分配足够资源并延长超时:
@Container private static final CouchbaseContainer container = new CouchbaseContainer(COUCHBASE_IMAGE_ENTERPRISE) .withCredentials("Administrator", "password") .withBucket(new BucketDefinition(BUCKET_NAME).withPrimaryIndex(true).withFlushEnabled(true)) .withStartupTimeout(Duration.ofMinutes(3)) .withMemory(8192) // 分配8GB内存 .withCpuCount(2); // 分配2核CPU
2. 调整日志捕获策略
EOFException多与容器日志流读取截断有关,可禁用Testcontainers默认日志捕获:
// 设置空日志消费者,避免默认流读取逻辑引发异常 container.withLogConsumer(outputFrame -> {});
或在src/test/resources/testcontainers.properties中添加全局配置:
testcontainers.logging.disabled=true
3. 对齐Testcontainers版本兼容性
部分Testcontainers版本与Couchbase 7.1.4存在适配问题,建议升级到1.19.x及以上稳定版,同时保证testcontainers-couchbase模块版本与核心Testcontainers版本一致。
4. 手动执行Couchbase初始化命令
绕过Testcontainers自动初始化逻辑,通过容器内CLI命令手动完成集群配置,提升启动稳定性:
@Container private static final CouchbaseContainer container = new CouchbaseContainer(COUCHBASE_IMAGE_ENTERPRISE) .withStartupTimeout(Duration.ofMinutes(3)) .withCommand("/bin/sh", "-c", "sleep 15 && " + "/opt/couchbase/bin/couchbase-cli cluster-init --cluster localhost --cluster-username Administrator --cluster-password password --services data,index,query && " + "/opt/couchbase/bin/couchbase-cli bucket-create --cluster localhost --username Administrator --password password --bucket " + BUCKET_NAME + " --bucket-type couchbase --bucket-ramsize 1024 && " + "/opt/couchbase/bin/cbq -u http://localhost:8091 -u Administrator -p password -e \"CREATE PRIMARY INDEX ON `" + BUCKET_NAME + "`\"" );
注意:调整sleep时间确保Couchbase服务就绪后再执行初始化命令。
内容的提问来源于stack exchange,提问作者RosarioB
相关产品推荐
相关产品推荐

