Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a976811

Browse files
committed
Merge pull request kpelykh#58 from marcuslinke/master
Issue kpelykh#51: Building an image - ADD for remote file URL fails
2 parents 921fd58 + 00ff6ec commit a976811

File tree

4 files changed

+57
-23
lines changed

4 files changed

+57
-23
lines changed

src/main/java/com/kpelykh/docker/client/DockerClient.java

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.sun.jersey.client.apache4.ApacheHttpClient4;
1414
import com.sun.jersey.client.apache4.ApacheHttpClient4Handler;
1515
import com.sun.jersey.core.util.MultivaluedMapImpl;
16+
1617
import org.apache.commons.codec.binary.Base64;
1718
import org.apache.commons.io.FileUtils;
1819
import org.apache.commons.io.IOUtils;
@@ -33,10 +34,13 @@
3334

3435
import javax.ws.rs.core.MediaType;
3536
import javax.ws.rs.core.MultivaluedMap;
37+
3638
import java.io.File;
3739
import java.io.IOException;
3840
import java.io.InputStream;
3941
import java.io.StringWriter;
42+
import java.net.URI;
43+
import java.net.URISyntaxException;
4044
import java.util.ArrayList;
4145
import java.util.List;
4246
import java.util.UUID;
@@ -788,6 +792,16 @@ public ClientResponse build(File dockerFolder) throws DockerException {
788792
public ClientResponse build(File dockerFolder, String tag) throws DockerException {
789793
return this.build(dockerFolder, tag, false);
790794
}
795+
796+
private static boolean isFileResource(String resource) {
797+
URI uri;
798+
try {
799+
uri = new URI(resource);
800+
} catch (URISyntaxException e) {
801+
throw new RuntimeException(e);
802+
}
803+
return uri.getScheme() == null || "file".equals(uri.getScheme());
804+
}
791805

792806
public ClientResponse build(File dockerFolder, String tag, boolean noCache) throws DockerException {
793807
Preconditions.checkNotNull(dockerFolder, "Folder is null");
@@ -826,19 +840,25 @@ public ClientResponse build(File dockerFolder, String tag, boolean noCache) thro
826840
throw new DockerException(String.format("Wrong format on line [%s]", cmd));
827841
}
828842

829-
File src = new File(addArgs[1]);
830-
if (!src.isAbsolute()) {
831-
src = new File(dockerFolder, addArgs[1]).getCanonicalFile();
832-
}
833-
834-
if (!src.exists()) {
835-
throw new DockerException(String.format("Source file %s doesn't exist", src));
836-
}
837-
if (src.isDirectory()) {
838-
filesToAdd.addAll(FileUtils.listFiles(src, null, true));
839-
} else {
840-
filesToAdd.add(src);
841-
}
843+
String resource = addArgs[1];
844+
845+
if(isFileResource(resource)) {
846+
File src = new File(resource);
847+
if (!src.isAbsolute()) {
848+
src = new File(dockerFolder, resource).getCanonicalFile();
849+
} else {
850+
throw new DockerException(String.format("Source file %s must be relative to %s", src, dockerFolder));
851+
}
852+
853+
if (!src.exists()) {
854+
throw new DockerException(String.format("Source file %s doesn't exist", src));
855+
}
856+
if (src.isDirectory()) {
857+
filesToAdd.addAll(FileUtils.listFiles(src, null, true));
858+
} else {
859+
filesToAdd.add(src);
860+
}
861+
}
842862
}
843863
}
844864

src/test/java/com/kpelykh/docker/client/test/DockerClientTest.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -619,18 +619,18 @@ public void testNginxDockerfileBuilder() throws DockerException,
619619
}
620620

621621
@Test
622-
public void testDockerBuilderAddFile() throws DockerException, IOException {
622+
public void testDockerBuilderAddUrl() throws DockerException, IOException {
623623
File baseDir = new File(Thread.currentThread().getContextClassLoader()
624-
.getResource("testAddFile").getFile());
625-
dockerfileBuild(baseDir, "Successfully executed testrun.sh");
624+
.getResource("testAddUrl").getFile());
625+
dockerfileBuild(baseDir, "docker.io");
626626
}
627627

628-
@Test
629-
public void testDockerBuilderAddFileInSubfolder() throws DockerException, IOException {
630-
File baseDir = new File(Thread.currentThread().getContextClassLoader()
631-
.getResource("testAddFileInSubfolder").getFile());
632-
dockerfileBuild(baseDir, "Successfully executed testrun.sh");
633-
}
628+
@Test
629+
public void testDockerBuilderAddFileInSubfolder() throws DockerException, IOException {
630+
File baseDir = new File(Thread.currentThread().getContextClassLoader()
631+
.getResource("testAddFileInSubfolder").getFile());
632+
dockerfileBuild(baseDir, "Successfully executed testrun.sh");
633+
}
634634

635635
@Test
636636
public void testDockerBuilderAddFolder() throws DockerException,
@@ -785,7 +785,7 @@ private String dockerfileBuild(File baseDir, String expectedText)
785785
ClientResponse logResponse = dockerClient.logContainer(container
786786
.getId());
787787

788-
assertThat(logResponseStream(logResponse), endsWith(expectedText));
788+
assertThat(logResponseStream(logResponse), containsString(expectedText));
789789

790790
return container.getId();
791791
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM ubuntu
2+
3+
# Copy testrun.sh files into the container
4+
5+
ADD http://www.docker.io /tmp/docker_home.html
6+
ADD ./testrun.sh /tmp/
7+
8+
RUN cp /tmp/testrun.sh /usr/local/bin/ && chmod +x /usr/local/bin/testrun.sh
9+
10+
CMD ["testrun.sh"]
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/sh
2+
3+
cat /tmp/docker_home.html
4+

0 commit comments

Comments
 (0)