Skip to content

Commit 56356b3

Browse files
committed
Merge pull request #180 from magnayn/pr9
Dockerfiles not called 'dockerfile'
2 parents 63ea2fa + a9c478b commit 56356b3

8 files changed

Lines changed: 96 additions & 10 deletions

File tree

src/main/java/com/github/dockerjava/api/DockerClient.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,9 @@ public CopyFileFromContainerCmd copyFileFromContainerCmd(
9898

9999
public CommitCmd commitCmd(String containerId);
100100

101-
public BuildImageCmd buildImageCmd(File dockerFolder);
101+
public BuildImageCmd buildImageCmd();
102+
103+
public BuildImageCmd buildImageCmd(File dockerFileOrFolder);
102104

103105
public BuildImageCmd buildImageCmd(InputStream tarInputStream);
104106

src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,12 @@ public interface BuildImageCmd extends DockerCmd<BuildImageCmd.Response>{
2828

2929
public boolean isQuiet();
3030

31+
public String getPathToDockerfile();
32+
3133
public AuthConfigurations getBuildAuthConfigs();
32-
34+
35+
public BuildImageCmd withBaseDirectory(File baseDirectory);
36+
3337
public BuildImageCmd withDockerfile(File dockerfile);
3438

3539
public BuildImageCmd withTarInputStream(InputStream tarInputStream);

src/main/java/com/github/dockerjava/core/DockerClientImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,12 @@ public CommitCmd commitCmd(String containerId) {
289289
.createCommitCmdExec(), containerId);
290290
}
291291

292+
@Override
293+
public BuildImageCmd buildImageCmd() {
294+
return new BuildImageCmdImpl(getDockerCmdExecFactory()
295+
.createBuildImageCmdExec());
296+
}
297+
292298
@Override
293299
public BuildImageCmd buildImageCmd(File dockerFileOrFolder) {
294300
return new BuildImageCmdImpl(getDockerCmdExecFactory()

src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.github.dockerjava.api.command.BuildImageCmd;
1010
import com.github.dockerjava.api.model.AuthConfigurations;
1111
import com.github.dockerjava.core.dockerfile.Dockerfile;
12+
import com.google.common.base.Optional;
1213

1314
/**
1415
*
@@ -24,6 +25,8 @@ public class BuildImageCmdImpl extends AbstrDockerCmd<BuildImageCmd, BuildImageC
2425
private boolean remove = true;
2526
private boolean quiet;
2627
private AuthConfigurations buildAuthConfigs;
28+
private File dockerFile;
29+
private File baseDirectory;
2730

2831
public BuildImageCmdImpl(BuildImageCmd.Exec exec) {
2932
super(exec);
@@ -33,10 +36,13 @@ public BuildImageCmdImpl(BuildImageCmd.Exec exec, File dockerFileOrFolder) {
3336
super(exec);
3437
checkNotNull(dockerFileOrFolder, "dockerFolder is null");
3538

36-
if( dockerFileOrFolder.isDirectory() )
37-
withDockerfile( new File(dockerFileOrFolder, "Dockerfile"));
38-
else
39-
withDockerfile( dockerFileOrFolder);
39+
if( dockerFileOrFolder.isDirectory() ) {
40+
withBaseDirectory(dockerFileOrFolder);
41+
withDockerfile(new File(dockerFileOrFolder, "Dockerfile"));
42+
}
43+
else {
44+
withDockerfile(dockerFileOrFolder);
45+
}
4046
}
4147

4248
public BuildImageCmdImpl(BuildImageCmd.Exec exec, InputStream tarInputStream) {
@@ -55,12 +61,20 @@ public BuildImageCmdImpl withDockerfile(File dockerfile) {
5561
checkNotNull(dockerfile);
5662
if( !dockerfile.exists() )
5763
throw new IllegalArgumentException("Dockerfile does not exist");
64+
if( !dockerfile.isFile() )
65+
throw new IllegalArgumentException("Not a directory");
66+
67+
if( baseDirectory == null )
68+
withBaseDirectory(dockerfile.getParentFile());
69+
70+
71+
this.dockerFile = dockerfile;
5872

5973
try {
6074
withTarInputStream(
6175
new Dockerfile(dockerfile)
6276
.parse()
63-
.buildDockerFolderTar() );
77+
.buildDockerFolderTar(baseDirectory) );
6478
} catch (IOException e) {
6579
// we just created the file this should never happen.
6680
throw new RuntimeException(e);
@@ -102,12 +116,24 @@ public boolean isQuiet() {
102116
return quiet;
103117
}
104118

105-
@Override
119+
@Override
120+
public String getPathToDockerfile() {
121+
int baseLen = baseDirectory.getAbsolutePath().length();
122+
return dockerFile.getAbsolutePath().substring(baseLen+1);
123+
}
124+
125+
@Override
106126
public AuthConfigurations getBuildAuthConfigs() {
107127
return buildAuthConfigs;
108128
}
109129

110-
@Override
130+
@Override
131+
public BuildImageCmd withBaseDirectory(File baseDirectory) {
132+
this.baseDirectory = baseDirectory;
133+
return this;
134+
}
135+
136+
@Override
111137
public BuildImageCmdImpl withNoCache() {
112138
return withNoCache(true);
113139
}

src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,18 @@ public class ScannedResult {
166166
final List<File> filesToAdd = new ArrayList<File>();
167167

168168
public InputStream buildDockerFolderTar() {
169+
return buildDockerFolderTar(getDockerFolder());
170+
}
171+
172+
public InputStream buildDockerFolderTar(File directory) {
169173

170174
// ARCHIVE TAR
171175
File dockerFolderTar = null;
172176

173177
try {
174178
String archiveNameWithOutExtension = UUID.randomUUID().toString();
175179

176-
dockerFolderTar = CompressArchiveUtil.archiveTARFiles(getDockerFolder(),
180+
dockerFolderTar = CompressArchiveUtil.archiveTARFiles(directory,
177181
filesToAdd,
178182
archiveNameWithOutExtension);
179183
return FileUtils.openInputStream(dockerFolderTar);

src/main/java/com/github/dockerjava/jaxrs/BuildImageCmdExec.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public BuildImageCmdExec(WebTarget baseResource) {
3535
@Override
3636
protected ResponseImpl execute(BuildImageCmd command) {
3737
WebTarget webResource = getBaseResource().path("/build");
38+
String dockerFilePath = command.getPathToDockerfile();
3839

3940
if(command.getTag() != null) {
4041
webResource = webResource.queryParam("t", command.getTag());
@@ -48,6 +49,9 @@ protected ResponseImpl execute(BuildImageCmd command) {
4849
if (command.isQuiet()) {
4950
webResource = webResource.queryParam("q", "true");
5051
}
52+
if( dockerFilePath != null && !"Dockerfile".equals(dockerFilePath)) {
53+
webResource = webResource.queryParam("dockerfile", dockerFilePath);
54+
}
5155

5256

5357
webResource.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);

src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,34 @@ public void testNginxDockerfileBuilder() {
7676
equalTo("Guillaume J. Charmes \"guillaume@dotcloud.com\""));
7777
}
7878

79+
@Test
80+
public void testNonstandard1() {
81+
File baseDir = new File(Thread.currentThread().getContextClassLoader()
82+
.getResource("nonstandard/subdirectory/Dockerfile-nonstandard").getFile());
83+
84+
InputStream response = dockerClient.buildImageCmd(baseDir).withNoCache().exec();
85+
86+
String fullLog = asString(response);
87+
assertThat(fullLog, containsString("Successfully built"));
88+
}
89+
90+
@Test
91+
public void testNonstandard2() {
92+
File baseDir = new File(Thread.currentThread().getContextClassLoader()
93+
.getResource("nonstandard").getFile());
94+
File dockerFile = new File(Thread.currentThread().getContextClassLoader()
95+
.getResource("nonstandard/subdirectory/Dockerfile-nonstandard").getFile());
96+
97+
98+
InputStream response = dockerClient.buildImageCmd()
99+
.withBaseDirectory(baseDir)
100+
.withDockerfile(dockerFile)
101+
.withNoCache().exec();
102+
103+
String fullLog = asString(response);
104+
assertThat(fullLog, containsString("Successfully built"));
105+
}
106+
79107
@Test
80108
public void testDockerBuilderAddUrl() {
81109
File baseDir = new File(Thread.currentThread().getContextClassLoader()
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Nginx
2+
#
3+
# VERSION 0.0.1
4+
5+
FROM ubuntu:latest
6+
MAINTAINER Guillaume J. Charmes "guillaume@dotcloud.com"
7+
8+
# make sure the package repository is up to date
9+
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
10+
RUN apt-get update
11+
12+
RUN apt-get install -y inotify-tools nginx apache2 openssh-server

0 commit comments

Comments
 (0)