From bf76ff2bb5cc7e47b636407ce9bcedc73db052e9 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Fri, 2 Aug 2019 11:43:39 +0200 Subject: [PATCH] openvidu-server: DockerManager allows to manually configure port binding --- .../service/ComposedRecordingService.java | 3 ++- .../openvidu/server/utils/DockerManager.java | 20 ++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedRecordingService.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedRecordingService.java index cb572c07..540beffd 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedRecordingService.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/ComposedRecordingService.java @@ -169,7 +169,8 @@ public class ComposedRecordingService extends RecordingService { List binds = new ArrayList<>(); binds.add(bind1); binds.add(bind2); - containerId = dockerManager.runContainer(container, containerName, volumes, binds, null, "host", envs); + containerId = dockerManager.runContainer(container, containerName, volumes, binds, null, null, "host", + envs); containers.put(containerId, containerName); } catch (Exception e) { this.cleanRecordingMaps(recording); 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 1ca790a9..9351bd62 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 @@ -122,7 +122,7 @@ public class DockerManager { } public String runContainer(String container, String containerName, List volumes, List binds, - List exposedPorts, String networkMode, List envs) throws Exception { + List exposedPorts, Ports portBindings, String networkMode, List envs) throws Exception { CreateContainerCmd cmd = dockerClient.createContainerCmd(container).withName(containerName).withEnv(envs); HostConfig hostConfig = new HostConfig().withNetworkMode(networkMode); @@ -133,14 +133,14 @@ public class DockerManager { hostConfig.withBinds(binds); } if (exposedPorts != null) { - Ports ps = new Ports(); + Ports symmetricPortBindings = new Ports(); List expPorts = new ArrayList<>(); exposedPorts.forEach(p -> { ExposedPort port = ExposedPort.tcp(p); expPorts.add(port); - ps.bind(port, Binding.bindPort(p)); + symmetricPortBindings.bind(port, Binding.bindPort(p)); }); - hostConfig.withPortBindings(ps); + hostConfig.withPortBindings((portBindings == null) ? symmetricPortBindings : portBindings); cmd.withExposedPorts(expPorts); } @@ -213,7 +213,17 @@ public class DockerManager { } } - static public String getDokerGatewayIp() { + public String getContainerIp(String containerId) { + try { + return CommandExecutor.execCommand("/bin/sh", "-c", + "docker inspect -f \"{{ .NetworkSettings.IPAddress }}\" " + containerId); + } catch (IOException | InterruptedException e) { + log.error(e.getMessage()); + return null; + } + } + + static public String getDockerGatewayIp() { try { return CommandExecutor.execCommand("/bin/sh", "-c", "docker network inspect bridge --format='{{(index .IPAM.Config 0).Gateway}}'");