我可以使用常规版本的 cassandra 设置测试容器,但尝试使用 DSE 版本会引发此错误
org.testcontainers.shaded.org.awaitility.core.ConditionTimeoutException: org.testcontainers.containers.GenericContainer expected the predicate to return <true> but it returned <false> for input of <InspectContainerResponse(
这是我当前失败的设置
@TestConfiguration
class TestContainer {
private static final String ROC_KEYSPACE = "cksdgmdp1";
private static CassandraContainer cassandraRocContainer;
private static final String DSE_IMAGE_VERSION =
"artifactory.aexp.com/dockerproxy/datastax/dse-server:5.1.10";
@BeforeAll
static void setupCassandraConnectionProperties() {
System.setProperty("spring.profiles.active", "e0");
System.setProperty("spring.profiles.env", "e0");
}
@Bean("cassandraRocSession")
public CassandraSession getCassandraRocSession() {
DockerImageName myImage =
DockerImageName.parse(DSE_IMAGE_VERSION)
.asCompatibleSubstituteFor("cassandra");
cassandraRocContainer =
(CassandraContainer)
new CassandraContainer(myImage)
.withInitScript(getCqlScript(ROC_KEYSPACE))
.withExposedPorts(9042);
// start container
cassandraRocContainer.start();
// create cluster object from container
Cluster cluster =
Cluster.builder()
.addContactPoint(cassandraRocContainer.getHost())
.withPort(cassandraRocContainer.getMappedPort(9042))
.withCredentials("", "")
.build();
// create session from newly created keyspace
Session session = cluster.connect(ROC_KEYSPACE);
return new CassandraSession(session, ROC_KEYSPACE);
}
public String getCqlScript(String keyspace) {
return String.format("%s.cql", keyspace);
}
@AfterAll
static void shutdown() {
cassandraRocContainer.close();
}
}
如果我将
DSE_IMAGE_VERSION
更改为 cassandra:3.11.4
那么它可以正常工作,但我需要使用 DSE 版本。说实话,我不知道该尝试什么,我对 DSE 和容器都很陌生。
根据文档,必须提供
DS_LICENSE=accept
环境变量。
尝试以下方法:
DockerImageName myImage = DockerImageName.parse("artifactory.aexp.com/dockerproxy/datastax/dse-server:5.1.10")
.asCompatibleSubstituteFor("cassandra");
CassandraContainer cassandraContainer = new CassandraContainer<>(myImage)
.withEnv("DS_LICENSE", "accept");
cassandraContainer.start();