@Override public void release(DockerContainerLocation machine) { lock.readLock().lock(); try { LOG.info("Releasing {}", machine); DynamicCluster cluster = dockerHost.getDockerContainerCluster(); DockerContainer container = machine.getOwner(); if (cluster.removeMember(container)) { LOG.info("Docker Host {}: member {} released", dockerHost.getDockerHostName(), machine); } else { LOG.warn( "Docker Host {}: member {} not found for release", dockerHost.getDockerHostName(), machine); } // Now close and unmange the container try { machine.close(); container.stop(); } catch (Exception e) { LOG.warn("Error stopping container: " + container, e); Exceptions.propagateIfFatal(e); } finally { Entities.unmanage(container); } } finally { lock.readLock().unlock(); } }