docker-compose - Testcontainers DockerComposeContainer 与 Docker Compose 版本 v2.0.0
问题描述
我正在尝试使用带有DockerComposeContainer
. 我的 docker-compose.yaml 内容是这样的:
version: '3.8'
services:
postgresql:
image: postgres:13
environment:
POSTGRES_USER: ordering
POSTGRES_PASSWORD: ordering
POSTGRES_DB: ordering
我正在使用以下 spring-boot 初始化程序代码声明容器:
static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
DockerComposeContainer<?> environment = new DockerComposeContainer<>(DOCKER_COMPOSE_FILE)
.withExposedService(DB_SERVICE_NAME, DB_PORT)
.withLocalCompose(true)
.start();
}
这曾经一直有效,直到最近在 MacOS 上更新了 docker-desktop。
现在它抛出以下错误:
Caused by: org.testcontainers.containers.ContainerLaunchException: Aborting attempt to link to container l2whc7cxqkzd_postgresql_1 as it is not running
at org.testcontainers.containers.GenericContainer.applyConfiguration(GenericContainer.java:812)
at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:363)
... 40 more
如果我在抛出异常之前在代码中放置一个断点并检查我正在运行的 docker 容器,我会看到一个名为 name 的容器l2whc7cxqkzd-postgresql-1
。不同之处在于名称中使用破折号而不是下划线。我猜这是最近关于项目标识符分隔符的 docker-compose 行为的变化。
我的问题是,有没有办法在 Docker Compose 2.0.0 中使用测试容器?
我的 testcontainers 依赖版本是1.16.0
和 docker 桌面版本 4.1.0。
解决方案
一种似乎可行的解决方法是将compatibility
选项传递给 docker compose 命令。喜欢:
static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
DockerComposeContainer<?> environment = new DockerComposeContainer<>(DOCKER_COMPOSE_FILE)
.withOptions("--compatibility")
.withExposedService(DB_SERVICE_NAME, DB_PORT)
.start();
}
}
推荐阅读
- java - Java向设备发送midi消息
- rest - 如何刷新 OAuth2 令牌?我需要等待令牌过期吗?(Patreon API)
- jquery - 在输入标签中输入文件选择的名称结果
- angular - PrimeNG Turbotable 在初始化时激活我的过滤器
- sql - 从选择查询中删除记录
- javascript - 将自定义标记添加到 Mapbox 地图
- java - 创建对象时如何增加对象数组?
- javascript - 将内容日期和时间作为字符串而不是数字返回
- csv - Netezza 将 csv 作为空表导入
- python - Python LMFIT - 使用有界参数时得到错误的最小化结果