如何使用docker-java获取正在运行的容器的容器ID?

时间:2017-04-17 18:42:16

标签: docker docker-java

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

例如:

  

docker 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()

3 个答案:

答案 0 :(得分:1)

您可以使用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();

那就是它!

答案 1 :(得分:0)

如果您正在使用本地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());
}

研究项目的自述文件,激励博客和维基,它们很短:)

答案 2 :(得分:0)

自从这个原始发布日期以来,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