如何使用特定的 docker 镜像启动测试容器?

Posted

技术标签:

【中文标题】如何使用特定的 docker 镜像启动测试容器?【英文标题】:How to start testcontainers with specific docker image? 【发布时间】:2021-05-08 19:42:05 【问题描述】:

我有一个junit 测试,使用testcontainers-1.15.1。如何启动显式图像?因为:

@SpringBootTest
public class ContainerTest 
   private final JdbcDatabaseContainer DB = new MariaDBContainer("mariadb:10.5.8");
  
   static 
       DB.start();
   
   
   @Test
   public void test()  

    

结果:默认10.3.6容器已启动。

[][] 2021-02-04 14:32:50,741 INFO ?.3.6]: Creating container for image: mariadb:10.3.6
[][] 2021-02-04 14:32:51,597 INFO ?.3.6]: Container mariadb:10.3.6 is starting: d9ccf77f4b9165ccd1690ee5cb8437f43e7d853dfe5121d468a391d67eccef7d

application.properties:

spring.datasource.url=jdbc:tc:mariadb:///test
spring.datasource.username=test
spring.datasource.password=test

【问题讨论】:

您使用的是哪个版本的测试容器? 【参考方案1】:

这可能是由于过去不同 Testcontainers 模块的构造函数的行为不一致。它已通过 this commit 修复,并且应该从 Testcontainers 1.15.0 开始可用。

不确定您的示例是否是伪测试代码,但以下示例是有效的可复制粘贴示例:

public class MariaDbContainerTest 

  private static final JdbcDatabaseContainer DB = new MariaDBContainer("mariadb:10.5.8");

  static 
    DB.start();
  

  @Test
  public void test() 

  

我已经对 Testcontainers 1.15.0 和 1.15.1 进行了测试,它可以在我的机器上运行

更新:除了作为测试的一部分手动定义容器之外,我还没有看到您还在 application.properties 文件中指定了 Testcontainers 的 JDBC 支持。

选择 JDBC 支持手动容器定义,您的问题应该得到解决。

使用 JDBC 支持时,您还可以指定数据库的版本:jdbc:tc:mariadb:10.5.8:///test

【讨论】:

奇怪,我也在 1.15.1。这可能是某种缓存问题吗?是否有明确的测试容器缓存? 我不知道。但是你仍然可以先尝试删除相关的 Docker 镜像 我必须在哪里删除它? 在 shell 中使用以下命令 docker rmi <nameOfTheImage>。使用docker images,您可以概览所有下载的图像。 是的,好的。我还刚刚了解到,不幸的是,仅从类路径强制重用是不可能的。

以上是关于如何使用特定的 docker 镜像启动测试容器?的主要内容,如果未能解决你的问题,请参考以下文章

docker中使用docker

简单使用docker

简单使用docker

如何交互式地创建一个Docker镜像

Linux修改docker镜像和容器的默认存储位置

Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)