测试泊坞窗图像。使用 exec 轻松启动并获取日志
Posted
技术标签:
【中文标题】测试泊坞窗图像。使用 exec 轻松启动并获取日志【英文标题】:Testing docker image. Easy start with exec and get log 【发布时间】:2021-02-24 10:41:54 【问题描述】:我为我的 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 文档的糟糕夜晚之后,我可以像这样启动图像:
dockerClient.startContainerCmd(dockerClient.createContainerCmd(dockerId).exec().id).exec()
但是当我打开 LogContainerCmd 并开始学习 ResultCallback 我想死!
我正在寻找简单的方法,用于我的简单测试。现在怎么样了?
【问题讨论】:
为什么要这样做? 我想测试我的形象。现在我对代码进行了单元测试。但我现在想要的是,我的图像可以快速构建并运行。 【参考方案1】:为什么不按照文档中的建议创建一个容器作为测试类字段? https://www.testcontainers.org/quickstart/junit_5_quickstart/从第2节开始
然后你可以运行一个命令,要么执行execResult.getStdout()
要么container.getLogs()
【讨论】:
很接近了!我创建@Container var myImage = GenericContainer<Nothing>(DockerImageName.parse("myName")).apply withCreateContainerCmdModifier it.withCmd("say --param \"hello world\"")
和我的测试@Test fun log() println("containerId: $myImage.containerId") println("logs: $myImage.logs") println("containerId: $myImage.containerId")
但控制台是containerId: cc5e818... logs: containerId: cc5e818...
登录测试为空!但我在我的 docker dashbord 中看到了日志。
这是我的错。容器需要时间来执行命令。我插入 Thread.sleep(1000) 我看到了日志!!!以上是关于测试泊坞窗图像。使用 exec 轻松启动并获取日志的主要内容,如果未能解决你的问题,请参考以下文章