From 08647869d32ecb0497461ce7f3999a4c099315ab Mon Sep 17 00:00:00 2001 From: cruizba Date: Tue, 23 Jun 2020 13:13:02 +0200 Subject: [PATCH] Added method to get sha256 id of a Docker image --- .../openvidu/server/utils/DockerManager.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/utils/DockerManager.java b/openvidu-server/src/main/java/io/openvidu/server/utils/DockerManager.java index 8d975438..6606b080 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/utils/DockerManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/utils/DockerManager.java @@ -26,14 +26,11 @@ import java.util.concurrent.TimeUnit; import javax.ws.rs.ProcessingException; -import com.github.dockerjava.api.command.InspectContainerResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.CreateContainerCmd; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.command.ExecCreateCmdResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; import com.github.dockerjava.api.exception.ConflictException; import com.github.dockerjava.api.exception.DockerClientException; import com.github.dockerjava.api.exception.InternalServerErrorException; @@ -49,6 +46,9 @@ import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.command.ExecStartResultCallback; import com.github.dockerjava.core.command.PullImageResultCallback; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.openvidu.client.OpenViduException; import io.openvidu.client.OpenViduException.Code; import io.openvidu.server.recording.service.WaitForContainerStoppedCallback; @@ -66,8 +66,10 @@ public class DockerManager { public void downloadDockerImage(String image, int secondsOfWait) throws Exception { try { + // Pull image this.dockerClient.pullImageCmd(image).exec(new PullImageResultCallback()).awaitCompletion(secondsOfWait, TimeUnit.SECONDS); + } catch (NotFoundException | InternalServerErrorException e) { if (dockerImageExistsLocally(image)) { log.info("Docker image '{}' exists locally", image); @@ -212,6 +214,15 @@ public class DockerManager { return null; } } + + public String getImageSha256(String image) { + try { + return CommandExecutor.execCommand(5000, "/bin/sh", "-c", "docker inspect " + image + " -f \"{{ .Id }}\""); + } catch (IOException | InterruptedException e) { + log.error(e.getMessage()); + return null; + } + } public List getRunningContainers(String fullImageName) { List containerIds = new ArrayList<>();