测试docker镜像轻松启动exec并获取日志

问题描述

我为CI创建了一个小型应用程序。这个应用程序非常简单,它可以打印到控制台属性(我将其设置为选项)并退出。 我可以在我的cmd(我使用Windows)中执行它,就像这样:

docker run --rm myImage:latest say --param "hello world"

我在cmd中看到“ hello world”。 现在我要对图像进行测试。我使用Kotlin作为主要语言,使用Junit5作为测试框架,并使用com.github.dockerjava.api.DockerClient作为Docker客户端。我想编写这样的简单测试:

@Testcontainers
class Test{

  val dockerImageId = System.getProperty("dockerImageId ")
  var dockerClient = DockerClientFactory.instance().client()

  @Test
    fun init() {
        val log = dockerClient.stratContainerFromImageId(dockerImageId).withExec("say --param \"hello world\"").getLog()
        assertEqals("hello world",log)
    }
}

在DockerClient Documentation经历了一个糟糕的夜晚之后,我可以像这样开始映像:

dockerClient.startContainerCmd(dockerClient.createContainerCmd(dockerId).exec().id).exec()

但是我打开LogContainerCmd并开始学习ResultCallback我想死!

为了简单的测试,我正在寻找简便的方法。现在怎么样了?

解决方法

您为什么不按照文档中的建议将容器创建为测试类字段? https://www.testcontainers.org/quickstart/junit_5_quickstart/从第2节开始

然后您可以运行命令,并执行execResult.getStdout()container.getLogs()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...