From 35c8dcb301e338e9d2191f608883bd07d3740892 Mon Sep 17 00:00:00 2001 From: Serhii Pererva Date: Wed, 10 Aug 2022 20:48:48 +0100 Subject: [PATCH] Add support for Docker Compose API v2 - add a way for getting container ID using v2 API - use container ID through v2 API if legacy API fails to locate that ID - V2 API filtering is prone to name clashes so added scaling instance suffix when filtering running services --- src/main/scala/com/tapad/docker/DockerCommands.scala | 7 ++++++- src/main/scala/com/tapad/docker/DockerComposePlugin.scala | 6 ++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/scala/com/tapad/docker/DockerCommands.scala b/src/main/scala/com/tapad/docker/DockerCommands.scala index 24f11b3..f6b8c3a 100644 --- a/src/main/scala/com/tapad/docker/DockerCommands.scala +++ b/src/main/scala/com/tapad/docker/DockerCommands.scala @@ -41,11 +41,16 @@ trait DockerCommands { Process(s"docker-machine ip $machineName").!!.trim } - def getDockerContainerId(instanceName: String, serviceName: String): String = { + def getDockerContainerIdLegacy(instanceName: String, serviceName: String): String = { //Docker replaces '/' with '_' in the identifier string so search for replaced version Process(s"""docker ps --all --filter=name=${instanceName.replace('/', '_')}_${serviceName}_ --format=\"{{.ID}}\"""").!!.trim().replaceAll("\"", "") } + def getDockerContainerId(instanceName: String, serviceName: String): String = { + // support for V2 Docker Compose API https://github.com/docker/compose#about-update-and-backward-compatibility + Process(s"""docker ps --all --filter=name=${instanceName.replace('/', '_')}-${serviceName}-1 --format=\"{{.ID}}\"""").!!.trim().replaceAll("\"", "") + } + def getDockerContainerInfo(containerId: String): String = { Process(s"docker inspect --type=container $containerId").!! } diff --git a/src/main/scala/com/tapad/docker/DockerComposePlugin.scala b/src/main/scala/com/tapad/docker/DockerComposePlugin.scala index 396763d..1624bdf 100644 --- a/src/main/scala/com/tapad/docker/DockerComposePlugin.scala +++ b/src/main/scala/com/tapad/docker/DockerComposePlugin.scala @@ -569,13 +569,15 @@ class DockerComposePluginLocal extends AutoPlugin with ComposeFile with DockerCo if (verbose) print(s"Waiting for container Id to be available for service '$serviceName' time remaining: ${deadline.timeLeft.toSeconds}") + val containerIdLegacy = getDockerContainerIdLegacy(instanceName, serviceName) val containerId = getDockerContainerId(instanceName, serviceName) + val finalContainerId = if (containerIdLegacy.isEmpty) containerId else containerIdLegacy - if (containerId.isEmpty) { + if (finalContainerId.isEmpty) { Thread.sleep(2000) tryGetContainerId(state, instanceName, serviceName, deadline) } else { - Some(containerId) + Some(finalContainerId) } } case false => None