private List<Container> findContainers(Id id, boolean allContainers) { final List<Container> matchingContainers = new ArrayList<>(); for (Container container : docker.listContainersCmd().withShowAll(allContainers).exec()) { boolean imageNameMatches = container.getImage().equals(repo.imageName(id)); String[] containerNames = container.getNames(); if (containerNames == null) { // Every container should have a name, but this is not the case // on Circle CI. Containers with no name are broken residues of // building the image and therefore will be ignored. continue; } boolean containerNameMatches = asList(containerNames).contains(containerName(id)); if (imageNameMatches || containerNameMatches) { matchingContainers.add(container); } } return matchingContainers; }
private void stop(final Id id) { if (id == null) { throw new IllegalArgumentException("id is null"); } logger.info("Stopping " + id); for (Container container : findRunningContainers(id)) { logger.info("Stopping container " + Arrays.toString(container.getNames())); try { docker.stopContainerCmd(container.getId()).withTimeout(1).exec(); } catch (DockerException e) { throw new OrchestrationException(e); } } for (Plugin plugin : plugins) { plugin.stopped(id, conf(id)); } }