diff --git a/src/main/java/com/github/dockerjava/core/exec/SaveImageCmdExec.java b/src/main/java/com/github/dockerjava/core/exec/SaveImageCmdExec.java index d79d3539a..94001bd5c 100644 --- a/src/main/java/com/github/dockerjava/core/exec/SaveImageCmdExec.java +++ b/src/main/java/com/github/dockerjava/core/exec/SaveImageCmdExec.java @@ -1,14 +1,14 @@ package com.github.dockerjava.core.exec; -import java.io.InputStream; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.github.dockerjava.api.command.SaveImageCmd; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.MediaType; import com.github.dockerjava.core.WebTarget; +import com.google.common.base.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.InputStream; public class SaveImageCmdExec extends AbstrSyncDockerCmdExec implements SaveImageCmd.Exec { private static final Logger LOGGER = LoggerFactory.getLogger(SaveImageCmdExec.class); @@ -19,8 +19,14 @@ public SaveImageCmdExec(WebTarget baseResource, DockerClientConfig dockerClientC @Override protected InputStream execute(SaveImageCmd command) { - WebTarget webResource = getBaseResource().path("/images/" + command.getName() + "/get").queryParam("tag", - command.getTag()); + + String name = command.getName(); + if (!Strings.isNullOrEmpty(command.getTag())) { + name += ":" + command.getTag(); + } + + WebTarget webResource = getBaseResource(). + path("/images/" + name + "/get"); LOGGER.trace("GET: {}", webResource); return webResource.request().accept(MediaType.APPLICATION_JSON).get(); diff --git a/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java index f3f9a0d35..c386ea3a0 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java +++ b/src/main/java/com/github/dockerjava/jaxrs/SaveImageCmdExec.java @@ -12,6 +12,7 @@ import com.github.dockerjava.api.command.SaveImageCmd; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.jaxrs.util.WrappedResponseInputStream; +import com.google.common.base.Strings; public class SaveImageCmdExec extends AbstrSyncDockerCmdExec implements SaveImageCmd.Exec { private static final Logger LOGGER = LoggerFactory.getLogger(SaveImageCmdExec.class); @@ -22,8 +23,13 @@ public SaveImageCmdExec(WebTarget baseResource, DockerClientConfig dockerClientC @Override protected InputStream execute(SaveImageCmd command) { - WebTarget webResource = getBaseResource().path("/images/" + command.getName() + "/get").queryParam("tag", - command.getTag()); + // If tag is present, only tar the specific image + // else tar all the images with the same name + String name = command.getName(); + if (!Strings.isNullOrEmpty(command.getTag())) { + name += ":" + command.getTag(); + } + WebTarget webResource = getBaseResource().path("/images/" + name + "/get"); LOGGER.trace("GET: {}", webResource); Response response = webResource.request().accept(MediaType.APPLICATION_JSON).get(); diff --git a/src/test/java/com/github/dockerjava/cmd/SaveImageCmdIT.java b/src/test/java/com/github/dockerjava/cmd/SaveImageCmdIT.java index 81abfcd9a..a9ba8ac25 100644 --- a/src/test/java/com/github/dockerjava/cmd/SaveImageCmdIT.java +++ b/src/test/java/com/github/dockerjava/cmd/SaveImageCmdIT.java @@ -19,6 +19,10 @@ public void saveImage() throws Exception { InputStream image = IOUtils.toBufferedInputStream(dockerRule.getClient().saveImageCmd("busybox").exec()); assertThat(image.available(), greaterThan(0)); + InputStream image2 = IOUtils.toBufferedInputStream(dockerRule.getClient().saveImageCmd("busybox").withTag("latest").exec()); + assertThat(image2.available(), greaterThan(0)); + + } }