如何使用特定的 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 镜像启动测试容器?的主要内容,如果未能解决你的问题,请参考以下文章