Skip to content

Commit 73602ad

Browse files
committed
Since docker 1.5.0, it has been allowable to specify files other
than 'Dockerfile' for building images. Alter the BuildImageCmd so that you can either specify the directory (which assumes Dockerfile, for backwards compat) or the actual file you wish to use. Signed-off-by: Nigel Magnay <nigel.magnay@gmail.com>
1 parent f38e935 commit 73602ad

3 files changed

Lines changed: 34 additions & 14 deletions

File tree

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.dockerjava.api.command;
22

3+
import java.io.File;
34
import java.io.IOException;
45
import java.io.InputStream;
56

@@ -26,9 +27,11 @@ public interface BuildImageCmd extends DockerCmd<BuildImageCmd.Response>{
2627
public boolean hasRemoveEnabled();
2728

2829
public boolean isQuiet();
29-
30+
3031
public AuthConfigurations getBuildAuthConfigs();
3132

33+
public BuildImageCmd withDockerfile(File dockerfile);
34+
3235
public BuildImageCmd withTarInputStream(InputStream tarInputStream);
3336

3437
public BuildImageCmd withNoCache();

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,9 @@ public CommitCmd commitCmd(String containerId) {
292292
}
293293

294294
@Override
295-
public BuildImageCmd buildImageCmd(File dockerFolder) {
295+
public BuildImageCmd buildImageCmd(File dockerFileOrFolder) {
296296
return new BuildImageCmdImpl(getDockerCmdExecFactory()
297-
.createBuildImageCmdExec(), dockerFolder);
297+
.createBuildImageCmdExec(), dockerFileOrFolder);
298298
}
299299

300300
@Override

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

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,18 @@ public class BuildImageCmdImpl extends AbstrDockerCmd<BuildImageCmd, BuildImageC
2525
private boolean quiet;
2626
private AuthConfigurations buildAuthConfigs;
2727

28-
public BuildImageCmdImpl(BuildImageCmd.Exec exec, File dockerFolder) {
28+
public BuildImageCmdImpl(BuildImageCmd.Exec exec) {
29+
super(exec);
30+
}
31+
32+
public BuildImageCmdImpl(BuildImageCmd.Exec exec, File dockerFileOrFolder) {
2933
super(exec);
30-
checkNotNull(dockerFolder, "dockerFolder is null");
34+
checkNotNull(dockerFileOrFolder, "dockerFolder is null");
3135

32-
try {
33-
withTarInputStream(
34-
new Dockerfile(new File(dockerFolder, "Dockerfile"))
35-
.parse()
36-
.buildDockerFolderTar() );
37-
} catch (IOException e) {
38-
// we just created the file this should never happen.
39-
throw new RuntimeException(e);
40-
}
36+
if( dockerFileOrFolder.isDirectory() )
37+
withDockerfile( new File(dockerFileOrFolder, "Dockerfile"));
38+
else
39+
withDockerfile( dockerFileOrFolder);
4140
}
4241

4342
public BuildImageCmdImpl(BuildImageCmd.Exec exec, InputStream tarInputStream) {
@@ -51,6 +50,24 @@ public InputStream getTarInputStream() {
5150
return tarInputStream;
5251
}
5352

53+
@Override
54+
public BuildImageCmdImpl withDockerfile(File dockerfile) {
55+
checkNotNull(dockerfile);
56+
if( !dockerfile.exists() )
57+
throw new IllegalArgumentException("Dockerfile does not exist");
58+
59+
try {
60+
withTarInputStream(
61+
new Dockerfile(dockerfile)
62+
.parse()
63+
.buildDockerFolderTar() );
64+
} catch (IOException e) {
65+
// we just created the file this should never happen.
66+
throw new RuntimeException(e);
67+
}
68+
return this;
69+
}
70+
5471
@Override
5572
public BuildImageCmdImpl withTarInputStream(InputStream tarInputStream) {
5673
checkNotNull(tarInputStream, "tarInputStream is null");

0 commit comments

Comments
 (0)