Как получить идентификатор контейнера работающего контейнера, используя 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