Spotify泊坞窗客户端无法在一项操作中启动容器并执行命令?

时间:2018-11-24 15:13:41

标签: java docker spotify-docker-client

我有以下代码段,使我能够启动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 个答案:

答案 0 :(得分:2)

您可以在容器的Dockerfile中更改RUN命令,以运行bash脚本,该脚本最后调用sleep 5000。这样,您的容器就不会立即停止。

答案 1 :(得分:1)

您可以通过无限的sleep循环启动容器

final ContainerConfig containerConfig = ContainerConfig.builder()
    .image(IMAGE)
    .cmd("sh", "-c", "while :; do sleep 1; done")
    .build();

(这是Spotify documentation中的示例)