diff --git a/src/main/java/io/fabric8/maven/docker/service/BuildService.java b/src/main/java/io/fabric8/maven/docker/service/BuildService.java index 61c0c8566..d0ee46467 100644 --- a/src/main/java/io/fabric8/maven/docker/service/BuildService.java +++ b/src/main/java/io/fabric8/maven/docker/service/BuildService.java @@ -370,7 +370,7 @@ private String extractBaseFromConfiguration(BuildImageConfiguration buildConfig) } static List extractBaseFromDockerfile(BuildImageConfiguration buildConfig, MojoParameters mojoParameters, Map buildArgs) { - if (buildConfig.getDockerFile() == null || !buildConfig.getDockerFile().exists()) { + if (buildConfig.getDockerFile() == null || !buildConfig.getAbsoluteDockerFilePath(mojoParameters).exists()) { if (buildConfig.getFrom() != null && !buildConfig.getFrom().isEmpty()) { return Collections.singletonList(buildConfig.getFrom()); } diff --git a/src/test/java/io/fabric8/maven/docker/MojoTestBase.java b/src/test/java/io/fabric8/maven/docker/MojoTestBase.java index 19887c79c..849bba0c7 100644 --- a/src/test/java/io/fabric8/maven/docker/MojoTestBase.java +++ b/src/test/java/io/fabric8/maven/docker/MojoTestBase.java @@ -251,6 +251,7 @@ protected void givenMavenProject(AbstractDockerMojo mojo) { mojo.project = mavenProject; mojo.log = ansiLogger; mojo.outputDirectory= "target/docker"; + mojo.sourceDirectory = "src/main/docker"; mojo.authConfigFactory= authConfigFactory; mojo.session = session; diff --git a/src/test/java/io/fabric8/maven/docker/service/BuildServiceTest.java b/src/test/java/io/fabric8/maven/docker/service/BuildServiceTest.java index 3088f765d..15b13bed1 100644 --- a/src/test/java/io/fabric8/maven/docker/service/BuildServiceTest.java +++ b/src/test/java/io/fabric8/maven/docker/service/BuildServiceTest.java @@ -3,6 +3,7 @@ import java.io.File; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -224,6 +225,38 @@ void testDockerfileWithBuildArgsInBuildConfig_ShouldPullImage() throws Exception verifyImagePull(buildConfig, pullManager, buildContext, "sample/base-image:latest"); } + @Test + void testRelativeDockerfile_ShouldPullImage() throws Exception { + final BuildImageConfiguration buildConfig = new BuildImageConfiguration.Builder() + .cleanup("false") + .dockerFile("Dockerfile_from_simple") + .filter("false") + .build(); + + Mockito.when(mavenProject.getBasedir()).thenReturn(new File(getClass().getResource("/").getPath())); + Mockito.when(mojoParameters.getSourceDirectory()).thenReturn("io/fabric8/maven/docker/util"); + + buildConfig.initAndValidate(logger); + + imageConfig = new ImageConfiguration.Builder() + .name("build-image") + .alias("build-alias") + .buildConfig(buildConfig) + .build(); + + final ImagePullManager pullManager = new ImagePullManager(null, null, null); + final BuildService.BuildContext buildContext = new BuildService.BuildContext.Builder() + .mojoParameters(mojoParameters) + .build(); + + mockMavenProject(); + + final File buildArchive = buildService.buildArchive(imageConfig, buildContext, ""); + buildService.buildImage(imageConfig, pullManager, buildContext, buildArchive); + + verifyImagePull(buildConfig, pullManager, buildContext, "fabric8/s2i-java"); + } + @Test void testBuildImagePullsDefaultImageWhenNoFromImage() throws Exception { BuildImageConfiguration buildConfig = new BuildImageConfiguration.Builder()