diff --git a/openvidu-server/pom.xml b/openvidu-server/pom.xml index 3bb830ee..28bd92a0 100644 --- a/openvidu-server/pom.xml +++ b/openvidu-server/pom.xml @@ -267,7 +267,7 @@ com.github.docker-java docker-java - 3.0.6 + 3.1.1 io.openvidu diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java index ea1b84bd..df73b041 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java @@ -146,7 +146,11 @@ public class RecordingManager { } }); t.start(); - dockerManager.downloadDockerImage(IMAGE_NAME + ":" + IMAGE_TAG); + try { + dockerManager.downloadDockerImage(IMAGE_NAME + ":" + IMAGE_TAG, 600); + } catch (Exception e) { + log.error("Error downloading docker image {}:{}", IMAGE_NAME, IMAGE_TAG); + } t.interrupt(); try { t.join(); 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 f7a7a2ad..11eee36b 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 @@ -36,6 +36,7 @@ import com.github.dockerjava.api.exception.InternalServerErrorException; import com.github.dockerjava.api.exception.NotFoundException; import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.Container; +import com.github.dockerjava.api.model.HostConfig; import com.github.dockerjava.api.model.Volume; import com.github.dockerjava.core.DefaultDockerClientConfig; import com.github.dockerjava.core.DockerClientBuilder; @@ -58,9 +59,10 @@ public class DockerManager { this.dockerClient = DockerClientBuilder.getInstance(config).build(); } - public void downloadDockerImage(String image) { + public void downloadDockerImage(String image, int secondsOfWait) throws Exception { try { - this.dockerClient.pullImageCmd(image).exec(new PullImageResultCallback()).awaitSuccess(); + 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); @@ -70,6 +72,9 @@ public class DockerManager { } catch (DockerClientException e) { log.info("Error on Pulling '{}' image. Probably because the user has stopped the execution", image); throw e; + } catch (InterruptedException e) { + log.info("Error on Pulling '{}' image. Thread was interrupted: {}", image, e.getMessage()); + throw e; } } @@ -112,8 +117,9 @@ public class DockerManager { public String runContainer(String container, String containerName, List volumes, List binds, List envs) throws Exception { + HostConfig hostConfig = new HostConfig().withNetworkMode("host").withBinds(binds); CreateContainerCmd cmd = dockerClient.createContainerCmd(container).withName(containerName).withEnv(envs) - .withNetworkMode("host").withVolumes(volumes).withBinds(binds); + .withHostConfig(hostConfig).withVolumes(volumes); CreateContainerResponse response = null; try { response = cmd.exec();