Найти в Дзене
Паша шКОДит

Когда Docker не дружит с интеграционниками

Снова при запуске интеграционных тестов в Spring Boot проекте с testcontainers начал ловить ошибку вида Caused by: java.lang.IllegalStateException: Could not find a valid Docker environment. Please see logs and check configuration Разберем в чем может быть проблема и какое решение помогло мне. Первым делом, при подобной ошибке мы идем проверять, что Docker Desktop запущен. В моем случае Docker работал исправно. Затем я пошел проверять файл ~/.testcontainers.properties, где в переменной docker.client.strategy указана дефолтная стратегия подключения к демону Docker. Рекомендации по выбору стратегии: В моем случае стояла стратегия NpipeSocketClientProviderStrategy - корректный выбор для Windows. Также можно удалить данный файл и testcontainers пересоздаст его с дефолтной стратегией (если меняли и забыли, что было в начале). В моем случае, проблема оказалась прозаичнее. В логах также можно было заметить 400-ую ошибку от Docker, что вывело меня на проблему несовместимости версий. В проект

Снова при запуске интеграционных тестов в Spring Boot проекте с testcontainers начал ловить ошибку вида

Caused by: java.lang.IllegalStateException: Could not find a valid Docker environment. Please see logs and check configuration

Разберем в чем может быть проблема и какое решение помогло мне.

Docker in da house
Docker in da house

Первым делом, при подобной ошибке мы идем проверять, что Docker Desktop запущен. В моем случае Docker работал исправно.

Затем я пошел проверять файл ~/.testcontainers.properties, где в переменной docker.client.strategy указана дефолтная стратегия подключения к демону Docker.

Рекомендации по выбору стратегии:

  • Для Linux/MacOS локальной разработки — UnixSocketClientProviderStrategy
  • Для Windows — NpipeSocketClientProviderStrategy
  • Для CI/CD и удалённых окружений — TcpSocketClientProviderStrategy
  • При работе с Docker Machine — DockerMachineClientProviderStrategy

В моем случае стояла стратегия NpipeSocketClientProviderStrategy - корректный выбор для Windows.

Проверяем стратегию подключения к Docker
Проверяем стратегию подключения к Docker

Также можно удалить данный файл и testcontainers пересоздаст его с дефолтной стратегией (если меняли и забыли, что было в начале).

В моем случае, проблема оказалась прозаичнее. В логах также можно было заметить 400-ую ошибку от Docker, что вывело меня на проблему несовместимости версий. В проекте использовалась версия спринга 3.5.4, а версия testcontainers бралась из bom-ника. При этом Docker Desktop я всегда обновляю до последней версии.

Так после обновления версии Spring с 3.5.4 до 3.5.10 проблема ушла. Версию я обновлял в рамках минорной 3.5.х, чтобы не поймать новых проблем из-за мажорных обновлений. Посмотреть последнюю минорную версию, можете в https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter

Если же нет возможности обновлять Spring, то можно указать новую версию testcontainers явно или даунгрейднуть версию Docker Desktop.