代码之家  ›  专栏  ›  技术社区  ›  Mads K

Spotify docker客户端无法在一次操作中启动容器并执行命令?

  •  1
  • Mads K  · 技术社区  · 6 年前

    我有下面的代码,它使我能够启动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 回复  |  直到 6 年前
        1
  •  1
  •   Uku Loskit    6 年前

    您可以用一个无穷大的 sleep

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

    (这是来自 Spotify documentation

        2
  •  3
  •   Robin Green    6 年前

    Dockerfile 运行调用 sleep 5000 最后。那么您的容器不会立即停止。