Skip to content

Commit

Permalink
Roll back to docker-java 2.x
Browse files Browse the repository at this point in the history
This reverts 2ecb33f and largely reverts 2c619f8.

docker-java 3.0 was causing a variety of problems and it appears that
we can get things working with Docker Java 2.2.x and Jackson 2.6.
  • Loading branch information
wilkinsona committed Mar 1, 2016
1 parent df28265 commit d46c9a2
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java</artifactId>
<version>3.0.0-RC1</version>
<version>2.2.2</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,30 @@
package org.springframework.boot.launchscript;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.exception.DockerClientException;
import com.github.dockerjava.api.command.DockerCmd;
import com.github.dockerjava.api.model.Frame;
import com.github.dockerjava.core.CompressArchiveUtil;
import com.github.dockerjava.core.DockerClientBuilder;
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.DockerClientConfig.DockerClientConfigBuilder;
import com.github.dockerjava.core.command.AttachContainerResultCallback;
import com.github.dockerjava.core.command.BuildImageResultCallback;
import com.github.dockerjava.core.command.WaitContainerResultCallback;
import com.github.dockerjava.jaxrs.AbstrSyncDockerCmdExec;
import com.github.dockerjava.jaxrs.DockerCmdExecFactoryImpl;
import org.assertj.core.api.Condition;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand All @@ -53,6 +63,8 @@
@RunWith(Parameterized.class)
public class SysVinitLaunchScriptIT {

private final SpringBootDockerCmdExecFactory commandExecFactory = new SpringBootDockerCmdExecFactory();

private static final char ESC = 27;

private final String os;
Expand Down Expand Up @@ -211,8 +223,7 @@ public void onNext(Frame item) {

});
resultCallback.awaitCompletion(60, TimeUnit.SECONDS).close();
docker.waitContainerCmd(container).exec(new WaitContainerResultCallback())
.awaitCompletion(60, TimeUnit.SECONDS);
docker.waitContainerCmd(container).exec();
return output.toString();
}
finally {
Expand All @@ -221,16 +232,11 @@ public void onNext(Frame item) {
}

private DockerClient createClient() {
DockerClientConfigBuilder builder = DockerClientConfig
.createDefaultConfigBuilder();
DockerClientConfig config;
try {
config = builder.build();
}
catch (DockerClientException ex) {
config = builder.withDockerTlsVerify(false).build();
}
return DockerClientBuilder.getInstance(config).build();
DockerClientConfig config = DockerClientConfig.createDefaultConfigBuilder()
.build();
DockerClient docker = DockerClientBuilder.getInstance(config)
.withDockerCmdExecFactory(this.commandExecFactory).build();
return docker;
}

private String buildImage(DockerClient docker) {
Expand Down Expand Up @@ -258,9 +264,10 @@ private void copyFilesToContainer(DockerClient docker, final String container,
new File("src/test/resources/scripts/" + script));
}

private void copyToContainer(DockerClient docker, String container, File file) {
docker.copyArchiveToContainerCmd(container)
.withHostResource(file.getAbsolutePath()).exec();
private void copyToContainer(DockerClient docker, final String container,
final File file) {
this.commandExecFactory.createCopyToContainerCmdExec()
.exec(new CopyToContainerCmd(container, file));
}

private File findApplication() {
Expand Down Expand Up @@ -302,4 +309,81 @@ private String extract(String label, String output) {
"Failed to extract " + label + " from output: " + output);
}

private static final class CopyToContainerCmdExec
extends AbstrSyncDockerCmdExec<CopyToContainerCmd, Void> {

private CopyToContainerCmdExec(WebTarget baseResource,
DockerClientConfig dockerClientConfig) {
super(baseResource, dockerClientConfig);
}

@Override
protected Void execute(CopyToContainerCmd command) {
try {
InputStream streamToUpload = new FileInputStream(CompressArchiveUtil
.archiveTARFiles(command.getFile().getParentFile(),
Arrays.asList(command.getFile()),
command.getFile().getName()));
WebTarget webResource = getBaseResource().path("/containers/{id}/archive")
.resolveTemplate("id", command.getContainer());
webResource.queryParam("path", ".")
.queryParam("noOverwriteDirNonDir", false).request()
.put(Entity.entity(streamToUpload, "application/x-tar")).close();
return null;
}
catch (Exception ex) {
throw new RuntimeException(ex);
}
}

}

private static final class CopyToContainerCmd implements DockerCmd<Void> {

private final String container;

private final File file;

private CopyToContainerCmd(String container, File file) {
this.container = container;
this.file = file;
}

public String getContainer() {
return this.container;
}

public File getFile() {
return this.file;
}

@Override
public void close() {

}

}

private static final class SpringBootDockerCmdExecFactory
extends DockerCmdExecFactoryImpl {

private SpringBootDockerCmdExecFactory() {
withClientRequestFilters(new ClientRequestFilter() {

@Override
public void filter(ClientRequestContext requestContext)
throws IOException {
// Workaround for https://go-review.googlesource.com/#/c/3821/
requestContext.getHeaders().add("Connection", "close");
}

});
}

private CopyToContainerCmdExec createCopyToContainerCmdExec() {
return new CopyToContainerCmdExec(getBaseResource(), getDockerClientConfig());
}

}

}

0 comments on commit d46c9a2

Please sign in to comment.