Skip to content

Commit bf2d6ee

Browse files
committed
Ref #33873: check health of docker container
1 parent 57c5dec commit bf2d6ee

1 file changed

Lines changed: 21 additions & 1 deletion

File tree

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

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
*/
2121
package eu.openanalytics.containerproxy.backend.docker;
2222

23+
import com.fasterxml.jackson.core.JsonProcessingException;
24+
import com.fasterxml.jackson.databind.ObjectMapper;
2325
import eu.openanalytics.containerproxy.ContainerFailedToStartException;
2426
import eu.openanalytics.containerproxy.event.NewProxyEvent;
2527
import eu.openanalytics.containerproxy.model.runtime.Container;
@@ -48,6 +50,7 @@
4850
import org.mandas.docker.client.messages.ContainerConfig;
4951
import org.mandas.docker.client.messages.ContainerCreation;
5052
import org.mandas.docker.client.messages.ContainerInfo;
53+
import org.mandas.docker.client.messages.ContainerState;
5154
import org.mandas.docker.client.messages.HostConfig;
5255
import org.mandas.docker.client.messages.PortBinding;
5356
import org.mandas.docker.client.messages.RegistryAuth;
@@ -307,7 +310,24 @@ public List<ExistingContainerInfo> scanExistingContainers() throws Exception {
307310

308311
@Override
309312
public boolean isProxyHealthy(Proxy proxy) {
310-
return true; // TODO
313+
for (Container container : proxy.getContainers()) {
314+
try {
315+
ContainerInfo info = dockerClient.inspectContainer(container.getId());
316+
ContainerState state = info.state();
317+
if (!state.running() || !state.status().equals("running")) {
318+
ObjectMapper objectMapper = new ObjectMapper();
319+
slog.warn(proxy, "Docker container failed: container not running, state reported by docker: " + objectMapper.writeValueAsString(state));
320+
return false;
321+
}
322+
return true;
323+
} catch (ContainerNotFoundException e) {
324+
slog.warn(proxy, "Docker container failed: container does not exist");
325+
return false;
326+
} catch (DockerException | InterruptedException | JsonProcessingException e) {
327+
throw new RuntimeException(e);
328+
}
329+
}
330+
return true;
311331
}
312332

313333
@Override

0 commit comments

Comments
 (0)