如何通过 Docker-java 获取现有容器 ID 列表
How to get list of existing containers ids by Docker-java
在 Java 代码中,我需要使用 Docker-java 库管理 docker 容器(重启、停止、启动...)。
https://github.com/docker-java/docker-java
在Docker-Java示例中我找到了创建和获取容器的方法:
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());
在命令行中我们可以使用:
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 webserver
但我需要通过 JAVA 代码来完成。我需要获取现有容器的 ID,然后获取它们的 IP 地址并使用 restartContainerCmd 方法重新启动它。
您可能正在寻找这样的实用方法:
void restartContainers(DockerClient dockerClient) {
dockerClient.listContainersCmd().exec().stream()
.map(Container::getId)
.map(dockerClient::restartContainerCmd)
.forEach(RestartContainerCmd::exec);
}
找到解决方案。把它放在这里,以防有人有同样的问题:
构建一个简单的DockerClient,然后创建ListContainersCmd对象并使用exec()方法,然后遍历容器列表并找到与IP关联的容器,然后获取容器ID;使用 Id 我们可以重新启动容器:
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();
}
}
在 Java 代码中,我需要使用 Docker-java 库管理 docker 容器(重启、停止、启动...)。 https://github.com/docker-java/docker-java
在Docker-Java示例中我找到了创建和获取容器的方法: 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());
在命令行中我们可以使用:
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 webserver
但我需要通过 JAVA 代码来完成。我需要获取现有容器的 ID,然后获取它们的 IP 地址并使用 restartContainerCmd 方法重新启动它。
您可能正在寻找这样的实用方法:
void restartContainers(DockerClient dockerClient) {
dockerClient.listContainersCmd().exec().stream()
.map(Container::getId)
.map(dockerClient::restartContainerCmd)
.forEach(RestartContainerCmd::exec);
}
找到解决方案。把它放在这里,以防有人有同样的问题:
构建一个简单的DockerClient,然后创建ListContainersCmd对象并使用exec()方法,然后遍历容器列表并找到与IP关联的容器,然后获取容器ID;使用 Id 我们可以重新启动容器:
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();
}
}