Skip to content

Commit

Permalink
Docker-build fails to detect podman
Browse files Browse the repository at this point in the history
Fixes #41085
  • Loading branch information
edeandrea authored and gsmet committed Jun 11, 2024
1 parent c2c55b4 commit b90b893
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.util.List;

import io.quarkus.deployment.util.ContainerRuntimeUtil;
import io.quarkus.deployment.util.ContainerRuntimeUtil.ContainerRuntime;

public class IsDockerWorking extends IsContainerRuntimeWorking {
public IsDockerWorking() {
Expand All @@ -19,7 +20,8 @@ public IsDockerWorking(boolean silent) {
private static class DockerBinaryStrategy implements Strategy {
@Override
public Result get() {
if (ContainerRuntimeUtil.detectContainerRuntime(false) != UNAVAILABLE) {
if (ContainerRuntimeUtil.detectContainerRuntime(false,
ContainerRuntime.DOCKER, ContainerRuntime.PODMAN) != UNAVAILABLE) {
return Result.AVAILABLE;
} else {
return Result.UNKNOWN;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.List;

import io.quarkus.deployment.util.ContainerRuntimeUtil;
import io.quarkus.deployment.util.ContainerRuntimeUtil.ContainerRuntime;

public class IsPodmanWorking extends IsContainerRuntimeWorking {
public IsPodmanWorking() {
Expand All @@ -21,7 +22,11 @@ public IsPodmanWorking(boolean silent) {
private static class PodmanBinaryStrategy implements Strategy {
@Override
public Result get() {
return (ContainerRuntimeUtil.detectContainerRuntime(false) != UNAVAILABLE) ? Result.AVAILABLE : Result.UNKNOWN;
if (ContainerRuntimeUtil.detectContainerRuntime(false, ContainerRuntime.PODMAN) != UNAVAILABLE) {
return Result.AVAILABLE;
} else {
return Result.UNKNOWN;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;
Expand Down Expand Up @@ -42,21 +43,20 @@ private ContainerRuntimeUtil() {
* @return a fully resolved {@link ContainerRuntime} indicating if Docker or Podman is available and in rootless mode or not
* @throws IllegalStateException if no container runtime was found to build the image
*/
public static ContainerRuntime detectContainerRuntime() {
return detectContainerRuntime(true);
}

public static ContainerRuntime detectContainerRuntime(List<ContainerRuntime> orderToCheckRuntimes) {
public static ContainerRuntime detectContainerRuntime(ContainerRuntime... orderToCheckRuntimes) {
return detectContainerRuntime(true, orderToCheckRuntimes);
}

public static ContainerRuntime detectContainerRuntime(boolean required) {
return detectContainerRuntime(required, List.of(ContainerRuntime.DOCKER, ContainerRuntime.PODMAN));
public static ContainerRuntime detectContainerRuntime(boolean required, ContainerRuntime... orderToCheckRuntimes) {
return detectContainerRuntime(
required,
((orderToCheckRuntimes != null) && (orderToCheckRuntimes.length > 0)) ? Arrays.asList(orderToCheckRuntimes)
: List.of(ContainerRuntime.DOCKER, ContainerRuntime.PODMAN));
}

public static ContainerRuntime detectContainerRuntime(boolean required, List<ContainerRuntime> orderToCheckRuntimes) {
ContainerRuntime containerRuntime = loadContainerRuntimeFromSystemProperty();
if (containerRuntime != null) {
if ((containerRuntime != null) && orderToCheckRuntimes.contains(containerRuntime)) {
return containerRuntime;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ protected void buildFromJar(C config,
BuildProducer<ArtifactResultBuildItem> artifactResultProducer,
BuildProducer<ContainerImageBuilderBuildItem> containerImageBuilder,
PackageConfig packageConfig,
ContainerRuntime containerRuntime) {
ContainerRuntime... containerRuntimes) {

var buildContainerImage = buildContainerImageNeeded(containerImageConfig, buildRequest);
var pushContainerImage = pushContainerImageNeeded(containerImageConfig, pushRequest);
Expand Down Expand Up @@ -84,7 +84,7 @@ protected void buildFromJar(C config,
LOGGER.infof("Starting (local) container image build for jar using %s", getProcessorImplementation());
}

var executableName = getExecutableName(config, containerRuntime);
var executableName = getExecutableName(config, containerRuntimes);
var builtContainerImage = createContainerImage(containerImageConfig, config, containerImageInfo, out,
dockerfilePaths, buildContainerImage, pushContainerImage, packageConfig, executableName);

Expand Down Expand Up @@ -113,7 +113,7 @@ protected void buildFromNativeImage(C config,
BuildProducer<ContainerImageBuilderBuildItem> containerImageBuilder,
PackageConfig packageConfig,
NativeImageBuildItem nativeImage,
ContainerRuntime containerRuntime) {
ContainerRuntime... containerRuntimes) {

var buildContainerImage = buildContainerImageNeeded(containerImageConfig, buildRequest);
var pushContainerImage = pushContainerImageNeeded(containerImageConfig, pushRequest);
Expand All @@ -134,7 +134,7 @@ protected void buildFromNativeImage(C config,
LOGGER.infof("Starting (local) container image build for jar using %s", getProcessorImplementation());
}

var executableName = getExecutableName(config, containerRuntime);
var executableName = getExecutableName(config, containerRuntimes);
var dockerfilePaths = getDockerfilePaths(config, true, packageConfig, out);
var builtContainerImage = createContainerImage(containerImageConfig, config, containerImage, out, dockerfilePaths,
buildContainerImage, pushContainerImage, packageConfig, executableName);
Expand Down Expand Up @@ -257,9 +257,9 @@ protected RuntimeException containerRuntimeException(String executableName, Stri
getProcessorImplementation()));
}

private String getExecutableName(C config, ContainerRuntime containerRuntime) {
protected String getExecutableName(C config, ContainerRuntime... containerRuntimes) {
return config.executableName()
.orElseGet(() -> detectContainerRuntime(List.of(containerRuntime)).getExecutableName());
.orElseGet(() -> detectContainerRuntime(containerRuntimes).getExecutableName());
}

private DockerfilePaths getDockerfilePaths(C config,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public void dockerBuildFromJar(DockerConfig dockerConfig,

buildFromJar(dockerConfig, dockerStatusBuildItem, containerImageConfig, out, containerImageInfo,
buildRequest, pushRequest, artifactResultProducer, containerImageBuilder, packageConfig,
ContainerRuntime.DOCKER);
ContainerRuntime.DOCKER, ContainerRuntime.PODMAN);
}

@BuildStep(onlyIf = { IsNormalNotRemoteDev.class, NativeBuild.class, DockerBuild.class })
Expand All @@ -81,7 +81,7 @@ public void dockerBuildFromNativeImage(DockerConfig dockerConfig,

buildFromNativeImage(dockerConfig, dockerStatusBuildItem, containerImageConfig, containerImage,
buildRequest, pushRequest, out, artifactResultProducer, containerImageBuilder, packageConfig, nativeImage,
ContainerRuntime.DOCKER);
ContainerRuntime.DOCKER, ContainerRuntime.PODMAN);
}

@Override
Expand Down Expand Up @@ -147,6 +147,19 @@ protected String createContainerImage(ContainerImageConfig containerImageConfig,
return containerImageInfo.getImage();
}

@Override
protected String getExecutableName(DockerConfig config, ContainerRuntime... containerRuntimes) {
var executableName = super.getExecutableName(config, containerRuntimes);

if (!DOCKER.equals(executableName)) {
LOG.warnf(
"Using executable %s within the quarkus-container-image-%s extension. Maybe you should use the quarkus-container-image-%s extension instead?",
executableName, DOCKER, executableName);
}

return executableName;
}

private String[] getDockerBuildArgs(String image,
DockerfilePaths dockerfilePaths,
ContainerImageConfig containerImageConfig,
Expand Down

0 comments on commit b90b893

Please sign in to comment.