使用 DockerComposeContainer 从组合文件中仅启动一项服务

Starting only one service from a compose file with DockerComposeContainer

是否有可能以某种方式 运行 仅测试容器 DockerComposeContainer 中的特定服务?

使用the official documentation中的例子,我们可以只启动Redis吗?对我来说,所有的服务一直在启动(我是否使用了 withExposedService 方法并不重要)。

我的意思是这样的方法:

new DockerComposeContainer(new File("src/test/resources/compose-test.yml"))
        .composeUpService("redis_1")

来自DockerComposeContainer, it appears the answer is no, but only because DockerComposeContainer.runWithCompose的源代码是私有的。

从该方法在其他地方(例如 DockerComposeContainer.createServices 的用法来看,似乎只需要公开 runWithCompose,您就可以获得完整的 docker-compose 命令设置,允许类似:

new DockerComposeContainer(new File("src/test/resources/compose-test.yml"))
      .runWithCompose("run -d redis");

(和其他 docker-compose run options)。

这是 github 中的一个非常活跃的项目,因此您可能会通过问题提交或更好的拉取请求获得关注。

通过添加 withServices(String... services) method (#1497). However, this feature was accidentally broken in 1.12.4 and is still broken in the latest 1.13.0 release (#2191).

,Testcontainers 1.11.4 添加了启动服务器子集的功能。

在可用的库版本中,您可以执行以下操作以仅启动单个 Redis 服务:

new DockerComposeContainer(new File("src/test/resources/compose-test.yml"))
    .withServices("redis_1")