Как получить идентификатор контейнера работающего контейнера, используя docker-java?

Я запускаю контейнер с тегом имени, который позволяет мне его идентифицировать. В docker-java для большинства операций требуется идентификатор контейнера, и я не знаю, как получить это с помощью docker-java. Может кто-нибудь помочь мне, как получить идентификатор контейнера для работающего контейнера?

Например:

докер PS

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

Я ищу способ, которым я мог бы получить ContainerId, используя ContainerNames.

ПРИМЕЧАНИЕ. Мне известен метод, описанный ниже, который создает новый контейнер и выбирает идентификатор. dockerClient.createContainerCmd(ImageName).exec(). GetId()

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

и это все!

Если вы работаете с локальным Docker Daemon, вы можете использовать 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 проекта, мотивационный пост и вики, они довольно короткие:)

С этой исходной даты публикации 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
Другие вопросы по тегам