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();