【问题标题】:How to get the container Id of the running container using docker-java?如何使用 docker-java 获取正在运行的容器的容器 ID?
【发布时间】:2017-09-13 10:11:50
【问题描述】:

我正在运行一个带有名称标签的容器,它允许我识别它。在 docker-java 中,大多数操作都需要容器 id,我不知道如何使用 docker-java 来获取它。谁能帮帮我如何获取正在运行的容器的容器 ID?

例如:

码头工人ps

    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8945dcd6195b        e7a064b1705a        "java '-Duser.time..."   4 days ago          Up 20 seconds                           runDataMock

我正在寻找一种可以使用 ContainerNames 获取 ContainerId 的方法。

注意:我知道下面的方法会创建一个新容器并选择 id。 dockerClient.createContainerCmd(imageName).exec().getId()

【问题讨论】:

    标签: docker docker-java


    【解决方案1】:

    自从这个原始发布日期以来,docker-java-api 已经经历了一些更新。要更新 @amihaiemill 对更新后 api 的原始答案,代码应该是

    final Docker docker = new UnixDocker( new File( "/var/run/docker.sock" ) );
    final Containers containers = docker.containers();
    
    for ( final Container running : containers ) {
        System.out.println( running.containerId() );
    }
    
    Thank you amihaiemil for your work on this project
    

    【讨论】:

      【解决方案2】:

      如果您正在使用本地 Docker 守护程序,您可以使用 https://www.github.com/amihaiemil/docker-java-api,版本 0.0.1 刚刚发布。

      要遍历所有正在运行的容器,您只需执行以下操作:

      final Containers containers = new LocalDocker(
          new File("/var/run/docker.sock")
      ).containers();
      for(final Container running : containers) {
          System.out.println(running.containerId());
      }
      

      研究项目的 README、励志博文和 wiki,它们都很短:)

      【讨论】:

        【解决方案3】:

        您可以使用 withXXX 方法按状态和其他属性过滤容器,但 docker-java API 中没有 WithNameFilter 方法。一种解决方法是使用通用过滤器:

        //get the docker client
        DockerClient docker = DockerClientBuilder.getInstance(config).build();
        //prepare command to retrieve the list of (running) containers 
        ListContainersCmd listContainersCmd = client.listContainersCmd().withStatusFilter("running");
        //and set the generic filter regarding name
        listContainersCmd.getFilters().put("name", Arrays.asList("redis"));
        //finally, run the command
        List<Container> exec = listContainersCmd.exec();
        

        就是这样!

        【讨论】:

          猜你喜欢
          • 2015-10-12
          • 1970-01-01
          • 2019-06-29
          • 2021-10-19
          • 2021-06-23
          • 1970-01-01
          • 2019-09-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多