我有以下代码段,使我能够启动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();
答案 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中的示例)