Клиент Spotify Docker не может запустить контейнер и выполнить команду за одну операцию?
У меня есть следующий фрагмент кода, который позволяет мне запустить контейнер Docker и затем запустить команду с подключенными Stdout и Stderr. Проблема здесь в том, что он запускает контейнер, но, конечно, выходит из контейнера, прежде чем я смог выполнить команду внутри контейнера. Как я могу запустить контейнер и выполнить команду внутри контейнера (в этом случае ls
) и держать stdout и stderr подключенными без получения сообщения об ошибке "не удается выполнить в остановленном состоянии"?
final String IMAGE = "centos";
final DockerClient docker = new
DefaultDockerClient("unix:///var/run/docker.sock");
docker.pull(IMAGE);
final ContainerConfig containerConfig = ContainerConfig.builder()
.image(IMAGE)
.build();
final ContainerCreation creation = docker.createContainer(containerConfig);
final String id = creation.id();
docker.startContainer(id);
final String[] command = {"sh", "-c", "ls"};
final ExecCreation execCreation = docker.execCreate(
id, command, DockerClient.ExecCreateParam.attachStdout(),
DockerClient.ExecCreateParam.attachStderr());
final LogStream output = docker.execStart(execCreation.id());
final String execOutput = output.readFully();
2 ответа
Вы можете изменить свою команду RUN в контейнере Dockerfile
запустить скрипт bash, который вызывает sleep 5000
в конце. Тогда ваш контейнер не остановится сразу.
Вы можете начать контейнер с бесконечным sleep
петля
final ContainerConfig containerConfig = ContainerConfig.builder()
.image(IMAGE)
.cmd("sh", "-c", "while :; do sleep 1; done")
.build();
(Это пример из документации Spotify)