Spotify docker 客户端无法在一次操作中启动容器和执行命令?
Spotify docker client not able to start container and execute command in one operation?
我有以下一段代码,它使我能够启动一个 Docker 容器,然后 运行 一个附加了 Stdout 和 Stderr 的命令。这里的问题是它启动了容器,但当然在我能够在容器内执行命令之前就退出了容器。我怎样才能启动容器并在容器内执行命令(在本例中为 ls
)并保持 stdout 和 stderr 附加而不收到 "cannot exec in a stopped state" 错误消息?
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();
您可以将容器 Dockerfile
中的 运行 命令更改为 运行 最后调用 sleep 5000
的 bash 脚本。那么你的容器不会立即停止。
您可以使用无限 sleep
循环启动容器
final ContainerConfig containerConfig = ContainerConfig.builder()
.image(IMAGE)
.cmd("sh", "-c", "while :; do sleep 1; done")
.build();
(这是来自 Spotify documentation 的示例)
我有以下一段代码,它使我能够启动一个 Docker 容器,然后 运行 一个附加了 Stdout 和 Stderr 的命令。这里的问题是它启动了容器,但当然在我能够在容器内执行命令之前就退出了容器。我怎样才能启动容器并在容器内执行命令(在本例中为 ls
)并保持 stdout 和 stderr 附加而不收到 "cannot exec in a stopped state" 错误消息?
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();
您可以将容器 Dockerfile
中的 运行 命令更改为 运行 最后调用 sleep 5000
的 bash 脚本。那么你的容器不会立即停止。
您可以使用无限 sleep
循环启动容器
final ContainerConfig containerConfig = ContainerConfig.builder()
.image(IMAGE)
.cmd("sh", "-c", "while :; do sleep 1; done")
.build();
(这是来自 Spotify documentation 的示例)