Skip to content

Commit 28ccf04

Browse files
committed
Fix #32590: fix docker-swarm logs
1 parent 92e554f commit 28ccf04

3 files changed

Lines changed: 44 additions & 17 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/backend/docker/AbstractDockerBackend.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -93,21 +93,7 @@ public void initialize() throws ContainerProxyException {
9393
portRangeTo = environment.getProperty(getPropertyPrefix() + PROPERTY_PORT_RANGE_MAX, Integer.class, -1);
9494
}
9595

96-
@Override
97-
public BiConsumer<OutputStream, OutputStream> getOutputAttacher(Proxy proxy) {
98-
Container c = getPrimaryContainer(proxy);
99-
if (c == null) return null;
10096

101-
return (stdOut, stdErr) -> {
102-
try {
103-
LogStream logStream = dockerClient.logs(c.getId(), DockerClient.LogsParam.follow(), DockerClient.LogsParam.stdout(), DockerClient.LogsParam.stderr());
104-
logStream.attach(stdOut, stdErr);
105-
} catch (ClosedChannelException ignored) {
106-
} catch (IOException | InterruptedException | DockerException e) {
107-
log.error("Error while attaching to container output", e);
108-
}
109-
};
110-
}
11197

11298
@Override
11399
protected String getPropertyPrefix() {

src/main/java/eu/openanalytics/containerproxy/backend/docker/DockerEngineBackend.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import eu.openanalytics.containerproxy.model.spec.ContainerSpec;
3636
import eu.openanalytics.containerproxy.model.spec.ProxySpec;
3737
import org.mandas.docker.client.DockerClient;
38+
import org.mandas.docker.client.LogStream;
3839
import org.mandas.docker.client.exceptions.ConflictException;
3940
import org.mandas.docker.client.exceptions.ContainerNotFoundException;
4041
import org.mandas.docker.client.exceptions.DockerException;
@@ -52,14 +53,18 @@
5253
import org.springframework.stereotype.Component;
5354

5455
import javax.annotation.PostConstruct;
56+
import java.io.IOException;
57+
import java.io.OutputStream;
5558
import java.net.MalformedURLException;
5659
import java.net.URI;
5760
import java.net.URL;
61+
import java.nio.channels.ClosedChannelException;
5862
import java.util.ArrayList;
5963
import java.util.Collections;
6064
import java.util.HashMap;
6165
import java.util.List;
6266
import java.util.Map;
67+
import java.util.function.BiConsumer;
6368
import java.util.stream.Stream;
6469

6570
@Component
@@ -267,6 +272,22 @@ public List<ExistingContainerInfo> scanExistingContainers() throws Exception {
267272
return containers;
268273
}
269274

275+
@Override
276+
public BiConsumer<OutputStream, OutputStream> getOutputAttacher(Proxy proxy) {
277+
Container c = getPrimaryContainer(proxy);
278+
if (c == null) return null;
279+
280+
return (stdOut, stdErr) -> {
281+
try {
282+
LogStream logStream = dockerClient.logs(c.getId(), DockerClient.LogsParam.follow(), DockerClient.LogsParam.stdout(), DockerClient.LogsParam.stderr());
283+
logStream.attach(stdOut, stdErr);
284+
} catch (ClosedChannelException ignored) {
285+
} catch (IOException | InterruptedException | DockerException e) {
286+
log.error("Error while attaching to container output", e);
287+
}
288+
};
289+
}
290+
270291
private boolean isImagePresent(ContainerSpec spec) throws DockerException, InterruptedException {
271292
try {
272293
dockerClient.inspectImage(spec.getImage().getValue());

src/main/java/eu/openanalytics/containerproxy/backend/docker/DockerSwarmBackend.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import eu.openanalytics.containerproxy.model.spec.ProxySpec;
4040
import eu.openanalytics.containerproxy.util.Retrying;
4141
import org.mandas.docker.client.DockerClient;
42+
import org.mandas.docker.client.LogStream;
4243
import org.mandas.docker.client.exceptions.DockerException;
4344
import org.mandas.docker.client.exceptions.ServiceNotFoundException;
4445
import org.mandas.docker.client.messages.RegistryAuth;
@@ -61,15 +62,18 @@
6162
import org.springframework.stereotype.Component;
6263

6364
import javax.annotation.PostConstruct;
65+
import java.io.IOException;
66+
import java.io.OutputStream;
6467
import java.net.MalformedURLException;
6568
import java.net.URI;
6669
import java.net.URL;
70+
import java.nio.channels.ClosedChannelException;
6771
import java.util.ArrayList;
6872
import java.util.HashMap;
6973
import java.util.List;
7074
import java.util.Map;
7175
import java.util.Optional;
72-
import java.util.UUID;
76+
import java.util.function.BiConsumer;
7377
import java.util.stream.Stream;
7478

7579
@Component
@@ -134,11 +138,11 @@ public Proxy startContainer(Authentication user, Container initialContainer, Con
134138
.secrets(secretBinds)
135139
.build();
136140

137-
List<NetworkAttachmentConfig> networks = spec.getNetworkConnections()
141+
List<NetworkAttachmentConfig> networks = new ArrayList<>(spec.getNetworkConnections()
138142
.getValueOrDefault(new ArrayList<>())
139143
.stream()
140144
.map(n -> NetworkAttachmentConfig.builder().target(n).build())
141-
.toList();
145+
.toList());
142146

143147
if (spec.getNetwork().isPresent()) {
144148
networks.add(NetworkAttachmentConfig.builder().target(spec.getNetwork().getValue()).build());
@@ -349,5 +353,21 @@ public List<ExistingContainerInfo> scanExistingContainers() throws Exception {
349353
return containers;
350354
}
351355

356+
@Override
357+
public BiConsumer<OutputStream, OutputStream> getOutputAttacher(Proxy proxy) {
358+
Container container = getPrimaryContainer(proxy);
359+
if (container == null) return null;
360+
String serviceId = container.getRuntimeObjectOrNull(BackendContainerNameKey.inst);
361+
362+
return (stdOut, stdErr) -> {
363+
try {
364+
LogStream logStream = dockerClient.serviceLogs(serviceId, DockerClient.LogsParam.follow(), DockerClient.LogsParam.stdout(), DockerClient.LogsParam.stderr());
365+
logStream.attach(stdOut, stdErr);
366+
} catch (ClosedChannelException ignored) {
367+
} catch (IOException | InterruptedException | DockerException e) {
368+
log.error("Error while attaching to container output", e);
369+
}
370+
};
371+
}
352372

353373
}

0 commit comments

Comments
 (0)