簡體   English   中英

如何通過 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 方法重新啟動它。

找到解決方案。 如果有人有同樣的問題,請將其放在這里:

構建一個簡單的 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();
        }
    }

您可能正在尋找這樣的實用方法:

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

GitHub 上的完整代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM