如何使用datastax enterprise cassandra设置测试容器?

问题描述 投票:0回答:1

我可以使用常规版本的 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 和容器都很陌生。

java docker datastax
1个回答
0
投票

根据文档,必须提供

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();
© www.soinside.com 2019 - 2024. All rights reserved.