使用DockerComposeContainer从撰写文件仅启动一项服务

时间:2018-08-02 16:27:53

标签: docker docker-compose testcontainers

是否有可能只运行特定的服务?

获取官方文档: https://github.com/testcontainers/testcontainers-java/blob/master/docs/usage/docker_compose.md

在上面的示例中,我们可以开始说redis吗? 对我来说,所有服务始终在启动(并且是否使用withExposedService都没有关系)。

我的意思是这样的方法: new DockerComposeContainer(new File(“ src / test / resources / compose-test.yml”))。composeUpService(“ redis”)

2 个答案:

答案 0 :(得分:3)

DockerComposeContainer的源代码看来,答案是否定的,但这仅仅是因为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中一个非常活跃的项目,因此您可以通过提交问题或更好的请求请求来吸引他们。

答案 1 :(得分:0)

通过添加withServices(String... services)方法(#1497)将启动服务器子集的功能添加到Testcontainers 1.11.4。但是,此功能在1.12.4中被意外打破,在最新的1.13.0版本(#2191)中仍然被打破。

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

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