3

在 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 方法重新启动它。

4

2 回答 2

2

找到解决方案。把它放在这里以防有人有同样的问题:

构建一个简单的 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();
        }
    }
于 2019-05-17T21:59:03.023 回答
0

您可能正在寻找这样的实用方法:

    void restartContainers(DockerClient dockerClient) {
        dockerClient.listContainersCmd().exec().stream()
            .map(Container::getId)
            .map(dockerClient::restartContainerCmd)
            .forEach(RestartContainerCmd::exec);
    }

GitHub上的完整代码

于 2019-05-16T23:53:49.457 回答