private String dockerExecOnClient(String... arguments) {
for (int i = 1; i <= MAX_EXEC_TRIES; i++) {
try {
log.info("Attempting docker-exec with arguments: {}", Arrays.asList(arguments));
return dockerComposeRule.exec(
DockerComposeExecOption.noOptions(),
CONTAINER,
ImmutableDockerComposeExecArgument.arguments(arguments));
} catch (InterruptedException | IOException e) {
throw Throwables.propagate(e);
} catch (DockerExecutionException e) {
if (i != MAX_EXEC_TRIES) {
log.warn("Encountered error in docker-exec, retrying (attempt {} of {})", i, MAX_EXEC_TRIES, e);
} else {
log.error("Made {} attempts, and now giving up", MAX_EXEC_TRIES, e);
throw e;
}
}
}
throw new IllegalStateException(
String.format("Unexpected state after %s unsuccessful attempts in docker-exec", MAX_EXEC_TRIES));
}
}