Can';t连接到Scala测试中的Cassandra docker容器
我非常渴望在Scala中建立docker测试 我在GitHub上创建了一个示例项目,以了解如何设置环境。可从以下网址获得:Can';t连接到Scala测试中的Cassandra docker容器,scala,docker,scalatest,docker-java,testcontainers,Scala,Docker,Scalatest,Docker Java,Testcontainers,我非常渴望在Scala中建立docker测试 我在GitHub上创建了一个示例项目,以了解如何设置环境。可从以下网址获得: 我选择了spotify/cassandra:latestimage 因为我使用的是ScalaTest,所以我想使用一个Scala包装器,但两个都失败了 1. 容器定义为: val cassandraContainer: DockerContainer = DockerContainer("spotify/cassandra:latest") .
我选择了
spotify/cassandra:latest
image
因为我使用的是ScalaTest,所以我想使用一个Scala包装器,但两个都失败了
1.
容器定义为:
val cassandraContainer: DockerContainer = DockerContainer("spotify/cassandra:latest")
.withPorts(9042 -> None, 9060 -> None)
override val container = GenericContainer(
"spotify/cassandra:latest",
exposedPorts = Seq(9042, 9160)
)
它是项目中的CassandraDockerTest
2.
容器定义为:
val cassandraContainer: DockerContainer = DockerContainer("spotify/cassandra:latest")
.withPorts(9042 -> None, 9060 -> None)
override val container = GenericContainer(
"spotify/cassandra:latest",
exposedPorts = Seq(9042, 9160)
)
它是项目中的CassandraContainerTest
我的假设
似乎存在的问题(在这两种情况下)是容器启动,但端口永远无法访问:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7cb5fc91a97d spotify/cassandra:latest "cassandra-singlenode" 3 seconds ago Up 2 seconds 0.0.0.0:33121->22/tcp, 0.0.0.0:33120->7000/tcp, 0.0.0.0:33119->7001/tcp, 0.0.0.0:33118->7199/tcp, 0.0.0.0:33117->8012/tcp, 0.0.0.0:33116->9042/tcp, 0.0.0.0:33115->9160/tcp, 0.0.0.0:33114->61621/tcp quirky_chandrasekhar
我希望9042
和9160
在0.0.0
上可用,但由于某些原因,即使指定了它们的配置,它们也不可用
谢谢 选项2将使用Testcontainers。在Testcontainers中,端口被随机映射以避免冲突 其中有
getContainerIpAddress
,getMappedPort(9042)
方法来获取实际端口。
有关详细信息,请参阅。我已设法找到解决方案 docker it scala 工作容器定义
val cassandraContainer: DockerContainer = DockerContainer("spotify/cassandra:latest")
.withPorts(9042 -> Some(9042), 9160 -> Some(9160))
.withReadyChecker(DockerReadyChecker.LogLineContains("Listening for thrift clients"))
override val container = GenericContainer(
"spotify/cassandra:latest",
exposedPorts = Seq(9042, 9160),
waitStrategy = new LogMessageContainsStrategy("Listening for thrift clients")
)
val cassandraContainer: DockerContainer = DockerContainer("spotify/cassandra:latest")
.withPorts(9042 -> Some(9042), 9160 -> Some(9160))
.withReadyChecker(DockerReadyChecker.LogLineContains("Listening for thrift clients"))
override val container = GenericContainer(
"spotify/cassandra:latest",
exposedPorts = Seq(9042, 9160),
waitStrategy = new LogMessageContainsStrategy("Listening for thrift clients")
)
testcontainers
不允许定义端口重定向。相反
必须使用getMappedPort
方法获取主机上的端口。谢谢@bsideupGitHub上提供了更详细的描述。也可以将其用作参考/示例 现在(2019年3月)存在一个特定的Cassandra测试容器模块,您可以在此处获取其maven或gradle依赖项:。它可以这样使用:
override val container = CassandraContainer("spotify/cassandra:latest")
.withExposedPorts(9042)
.waitingFor(Wait.forListeningPort())