Check https://github.com/docker-java/docker-java/issues/738
This is some code I've made:
public class DockerizedServerInstantiator {
public static class StdioAdapter extends ResultCallback.Adapter<Frame> {
@Override
public void onNext(Frame object) {
this.onLineGot(new String(object.getPayload()), object.getStreamType().equals(StreamType.STDERR));
}
private void onLineGot(String line, boolean stderr) {
System.out.println((stderr ? "(err) " : "") + line);
}
}
/**
* Attaches Docker output to a callback method
* @param dockerClient Docker client
* @param container Container to attach
* @param callback Object with the callback method to call
*/
private static void attachStdio(DockerClient dockerClient, CreateContainerResponse container, ResultCallback<Frame> callback) {
dockerClient.logContainerCmd(container.getId())
.withStdOut(true)
.withStdErr(true)
.withFollowStream(true)
.exec(callback);
}
public void startDocker() {
DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder().build();
final DockerClient dockerClient = DockerClientBuilder.getInstance(config).build();
CreateContainerResponse container;
StartContainerCmd cnt;
container = dockerClient.createContainerCmd(...)
.withCmd(...).exec();
cnt = dockerClient.startContainerCmd(container.getId());
cnt.exec();
attachStdio(dockerClient, container, new StdioAdapter());
}
}