Я создаю несколько тестов для моей службы CI/CD с тестконтейнеры.
Один из тестов содержит сборку образа докера внутри тестового контейнера. Это терпит неудачу, поскольку он не может получить доступ к демону Docker.
Вопрос в том, как поделиться локальным демоном docker с testcontainer или как проще всего запустить docker doemon внутри testcontainer?
Итак, наконец, я решил эту проблему, запустив docker-dind
изображение в качестве дополнительного контейнера.
@Slf4j
@NoArgsConstructor
public class DockerContainer {
public static final String HOST = "test.docker.env";
private static GenericContainer<?> container;
public static void init() {
container = new GenericContainer<>(DockerImageName.parse("docker:20.10.14-dind"))
.withNetworkAliases(HOST)
.withNetwork(SHARED)
.withExposedPorts(2375)
.withEnv("DOCKER_TLS_CERTDIR", "")
.withPrivilegedMode(true)
.withLogConsumer(new Slf4jLogConsumer(log));
}
public static GenericContainer<?> getInstance() {
if (container == null) {
init();
}
return container;
}
}
И добавил узел докера в мой контейнер CI:
this.container.dependsOn(DockerContainer.getInstance());
this.container.addEnv("DOCKER_HOST", String.format("tcp://%s:2375", DockerContainer.HOST));
Теперь это работает хорошо