在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方法重新启动它。
答案 0 :(得分:1)
找到解决方案。如果有人有相同的问题,请放在此处:
构建一个简单的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();
}
}
答案 1 :(得分:0)
您可能正在寻找这样的实用方法:
void restartContainers(DockerClient dockerClient) {
dockerClient.listContainersCmd().exec().stream()
.map(Container::getId)
.map(dockerClient::restartContainerCmd)
.forEach(RestartContainerCmd::exec);
}