问题描述
在 IntelliJ IDEA(版本 Community 2021.1
)中通过 Maven(版本3.8.1
)运行 JUnit 集成测试时遇到问题。我的 Docker 桌面版本是 3.3.1 (63152)
。我在 M1(ARM 架构)上使用 Apple Macbook。
测试容器是基于 Postgre 的 TimescaleDB(timescale-pgcron:latest
是我的 Docker 桌面中的预构建映像):
public class MyTimescaleContainer extends PostgresqlContainer<MyTimescaleContainer> {
private MyTimescaleContainer() {
super(DockerImageName.parse("timescale-pgcron").asCompatibleSubstituteFor("postgres").withTag("latest"));
}
public static MyTimescaleContainer getInstance() {
return LazyHolder.INSTANCE;
}
@Override
public void start() {
super.start();
}
@Override
public void stop() {
//do nothing,JVM handles shut down
}
private static class LazyHolder {
static final MyTimescaleContainer INSTANCE = new MyTimescaleContainer()
.withReuse(true)
.waitingFor(Wait.forHealthcheck());
}
}
测试容器依赖:
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
<version>1.15.0-rc2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<version>1.15.0-rc2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
<version>1.15.0-rc2</version>
<scope>test</scope>
</dependency>
当我直接通过 JUnit 执行我的测试时(右键单击我的测试包并按 Run 'Tests in '<my test package>''
),容器正常启动并且测试成功运行。但是,当我通过 Maven 运行它时,它会删除:
[ERROR] com.mypackage.MyTest Time elapsed: 0.001 s <<< ERROR!
org.testcontainers.containers.ContainerLaunchException: Container startup Failed
at com.mypackage.MyTest.startUp(MyTest.java:31)
Caused by: org.testcontainers.containers.ContainerFetchException: Can't get Docker image: RemoteDockerImage(imageName=timescale-pgcron:latest,imagePullPolicy=DefaultPullPolicy())
at com.mypackage.MyTest.startUp(MyTest.java:31)
Caused by: java.lang.IllegalStateException: Could not find a valid Docker environment. Please see logs and check configuration
at com.mypackage.MyTest.startUp(MyTest.java:31)
以前有人遇到过这个问题吗? 使用运行 Maven 的作业中的这些设置,该测试也在 CircleCI 上运行良好(如果没有这些设置,作业将失败并出现上述相同的 Docker 错误):
machine:
image: ubuntu-2004:202010-01
我一开始以为可能和苹果的 M1 平台有关,因为绝大多数镜像都不支持,其实是通过 Docker 的 --platform linux/amd64
标志绕过的,但是我没有指定任何标志的时候我直接通过 JUnit 运行测试,它仍然成功地启动了容器。那么 Maven 有什么问题?
更新。
这是我直接从 docker ps
运行 JUnit 时 Run 'Tests in...'
的屏幕截图,如您所见,timescale-pgcron:latest
已启动:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)