En el código Java, necesito administrar los contenedores docker (reiniciar, detener, iniciar ...) usando la biblioteca Docker-java. https://github.com/docker-java/docker-java
En los ejemplos de Docker-Java, encontré la forma de crear y obtener un contenedor: https://github.com/docker-java/docker-java/wiki
DockerClient dockerClient = DockerClientBuilder.getInstance().build(); CreateContainerResponse container = dockerClient.createContainerCmd("nginx") .exec(); System.out.println(container.getId()); dockerClient.restartContainerCmd(container.getId());en línea de comando podemos usar:
docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4dd858fe9022 nginx "nginx -g 'daemon of…" 42 hours ago Up 42 hours 0.0.0.0:80->80/tcp webserverPero necesito hacerlo por código JAVA. Necesito obtener las ID de los contenedores existentes, luego obtener sus direcciones IP y usar el método restartContainerCmd para reiniciarlo.
Solución encontrada. Póngalo aquí en caso de que alguien tenga la misma pregunta:
Cree un DockerClient simple, luego cree el objeto ListContainersCmd y use el método exec(), luego itere a través de la lista de contenedores y encuentre los asociados del contenedor con la IP y luego obtenga la identificación del contenedor; con Id podemos reiniciar el contenedor:
DockerClient dockerClient = DockerClientBuilder.getInstance().build(); ListContainersCmd listContainersCmd = dockerClient.listContainersCmd().withShowAll(true); for (Container container: listContainersCmd.exec()) { if (container.toString().contains("192.168.1.105")){ dockerClient.restartContainerCmd(container.getId()).exec(); } }Es posible que esté buscando un método de utilidad como este:
void restartContainers(DockerClient dockerClient) { dockerClient.listContainersCmd().exec().stream() .map(Container::getId) .map(dockerClient::restartContainerCmd) .forEach(RestartContainerCmd::exec); }