diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/README.adoc b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/README.adoc
index 84d96700bd..04fe3665eb 100644
--- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/README.adoc
+++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/README.adoc
@@ -4,16 +4,20 @@ This module contains integration tests for the default launch script that is use
to make a jar file fully executable on Linux. The tests use Docker to verify the
functionality in a variety of Linux distributions.
+
+
== Setting up Docker
The setup that's required varies depending on your operating system.
+
+
=== Docker on OS X
-The latest version of Docker runs as a native Mac application but isn't supported by
-docker-java. This means that you should use Docker Toolbox. See the
-https://docs.docker.com/engine/installation/mac/[OS X installation instructions] for
-details.
+Install Docker for Mac. See the https://docs.docker.com/docker-for-mac/install/[macOS
+installation instructions] for details.
+
+
=== Docker on Linux
@@ -30,29 +34,7 @@ $ sudo usermod -a -G docker awilkinson
You may need to log out and back in again for this change to take affect and for your
user to be able to connect to the daemon.
-== Preparing to run the tests
-
-Before running the tests, you must prepare your environment according to your operating
-system.
-
-=== Preparation on OS X
-
-The tests must be run in an environment where various environment variables including
-`DOCKER_HOST` and `DOCKER_CERT_PATH` have been set:
-----
-$ eval $(docker-machine env default)
-----
-
-=== Preparation on Linux
-
-Docker Daemon's default configuration on Linux uses a Unix socket for communication.
-However, Docker's Java client uses HTTP by default. Docker Java's client can be configured
-to use the Unix socket via the `DOCKER_URL` environment variable:
-
-----
-$ export DOCKER_URL=unix:///var/run/docker.sock
-----
== Running the tests
@@ -69,6 +51,8 @@ connection. Subsequent runs will be faster as the images are cached locally. You
`docker images` to see a list of the cached images. Images created by these tests will be
tagged with `spring-boot-it` prefix to easily distinguish them.
+
+
== Cleaning up
If you want to reclaim the disk space used by the cached images (at the expense of having
diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/pom.xml b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/pom.xml
index 220d17921b..0cbf662c00 100644
--- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/pom.xml
+++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/pom.xml
@@ -12,7 +12,7 @@
Spring Boot Launch Script Integration Tests
${basedir}/../../..
- 2.11
+ 2.23.1
@@ -32,7 +32,7 @@
com.github.docker-java
docker-java
- 2.2.3
+ 3.0.14
test
diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java
index e4a8871acd..b3a3f58345 100644
--- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java
+++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/java/org/springframework/boot/launchscript/SysVinitLaunchScriptIT.java
@@ -22,6 +22,7 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
@@ -30,17 +31,19 @@ import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import com.github.dockerjava.api.DockerClient;
-import com.github.dockerjava.api.DockerClientException;
import com.github.dockerjava.api.command.DockerCmd;
+import com.github.dockerjava.api.exception.DockerClientException;
import com.github.dockerjava.api.model.BuildResponseItem;
import com.github.dockerjava.api.model.Frame;
-import com.github.dockerjava.core.CompressArchiveUtil;
+import com.github.dockerjava.core.DefaultDockerClientConfig;
import com.github.dockerjava.core.DockerClientBuilder;
import com.github.dockerjava.core.DockerClientConfig;
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.core.util.CompressArchiveUtil;
import com.github.dockerjava.jaxrs.AbstrSyncDockerCmdExec;
-import com.github.dockerjava.jaxrs.DockerCmdExecFactoryImpl;
+import com.github.dockerjava.jaxrs.JerseyDockerCmdExecFactory;
import org.assertj.core.api.Condition;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -253,8 +256,10 @@ public class SysVinitLaunchScriptIT {
}
});
- resultCallback.awaitCompletion(60, TimeUnit.SECONDS).close();
- docker.waitContainerCmd(container).exec();
+ resultCallback.awaitCompletion(60, TimeUnit.SECONDS);
+ WaitContainerResultCallback waitContainerCallback = new WaitContainerResultCallback();
+ docker.waitContainerCmd(container).exec(waitContainerCallback);
+ waitContainerCallback.awaitCompletion(60, TimeUnit.SECONDS);
return output.toString();
}
finally {
@@ -268,11 +273,10 @@ public class SysVinitLaunchScriptIT {
}
private DockerClient createClient() {
- DockerClientConfig config = DockerClientConfig.createDefaultConfigBuilder()
- .withVersion("1.19").build();
- DockerClient docker = DockerClientBuilder.getInstance(config)
+ DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
+ .withApiVersion("1.19").build();
+ return DockerClientBuilder.getInstance(config)
.withDockerCmdExecFactory(this.commandExecFactory).build();
- return docker;
}
private String buildImage(DockerClient docker) {
@@ -328,7 +332,8 @@ public class SysVinitLaunchScriptIT {
}
};
- docker.buildImageCmd(new File(dockerfile)).withTag(tag).exec(resultCallback);
+ docker.buildImageCmd(new File(dockerfile))
+ .withTags(new HashSet<>(Arrays.asList(tag))).exec(resultCallback);
String imageId = resultCallback.awaitImageId();
return imageId;
}
@@ -403,8 +408,8 @@ public class SysVinitLaunchScriptIT {
@Override
protected Void execute(CopyToContainerCmd command) {
- try (InputStream streamToUpload = new FileInputStream(CompressArchiveUtil
- .archiveTARFiles(command.getFile().getParentFile(),
+ try (InputStream streamToUpload = new FileInputStream(
+ CompressArchiveUtil.archiveTARFiles(command.getFile().getParentFile(),
Arrays.asList(command.getFile()),
command.getFile().getName()))) {
WebTarget webResource = getBaseResource().path("/containers/{id}/archive")
@@ -448,13 +453,7 @@ public class SysVinitLaunchScriptIT {
}
private static final class SpringBootDockerCmdExecFactory
- extends DockerCmdExecFactoryImpl {
-
- private SpringBootDockerCmdExecFactory() {
- withClientRequestFilters((requestContext) ->
- // Workaround for https://go-review.googlesource.com/#/c/3821/
- requestContext.getHeaders().add("Connection", "close"));
- }
+ extends JerseyDockerCmdExecFactory {
private CopyToContainerCmdExec createCopyToContainerCmdExec() {
return new CopyToContainerCmdExec(getBaseResource(), getDockerClientConfig());
diff --git a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/logback.xml b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/logback.xml
index 06d012c0fb..51a2f698fa 100644
--- a/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/logback.xml
+++ b/spring-boot-tests/spring-boot-integration-tests/spring-boot-launch-script-tests/src/test/resources/logback.xml
@@ -6,8 +6,6 @@
-
-