From 94df38ea66323c18699556d5acad150a27483bba Mon Sep 17 00:00:00 2001 From: Michael Jaeger <73838886+michaelmejaeger@users.noreply.github.com> Date: Fri, 10 Jan 2025 14:31:54 +0100 Subject: [PATCH] fix: respects network configuration for buildx (#1850) * fix: respects network configuration for buildx * docs: updates id of pull request * chore: fixes Issue found by SonarQube --- doc/changelog.md | 2 ++ .../fabric8/maven/docker/config/ConfigHelper.java | 14 ++++++++++++++ .../maven/docker/service/BuildXService.java | 5 +++++ .../maven/docker/service/BuildXServiceTest.java | 13 +++++++++++++ 4 files changed, 34 insertions(+) diff --git a/doc/changelog.md b/doc/changelog.md index 4d0f97f04..311ae42df 100644 --- a/doc/changelog.md +++ b/doc/changelog.md @@ -1,7 +1,9 @@ # ChangeLog + * **0.46-SNAPSHOT**: - Docker-compose healthcheck configuration support ([1825](https://github.com/fabric8io/docker-maven-plugin/pull/1825)) - Docker container wait timeout default value made configurable using startContainerWaitTimeout configuration option ([1825](https://github.com/fabric8io/docker-maven-plugin/pull/1825)) + - Respect `network` configuration in POM and with property `docker.build.network` or system property `docker.network.mode` in docker buildx [1850](https://github.com/fabric8io/docker-maven-plugin/pull/1850)) * **0.45.1 (2024-09-29)**: - Make copy docker-buildx binary to temporary config directory work on windows too ([1819](https://github.com/fabric8io/docker-maven-plugin/pull/1819)) diff --git a/src/main/java/io/fabric8/maven/docker/config/ConfigHelper.java b/src/main/java/io/fabric8/maven/docker/config/ConfigHelper.java index df30b9c87..8fcfb0c2d 100644 --- a/src/main/java/io/fabric8/maven/docker/config/ConfigHelper.java +++ b/src/main/java/io/fabric8/maven/docker/config/ConfigHelper.java @@ -173,6 +173,20 @@ private static void verifyImageNames(List ret) { } } + public static String getNetwork(ImageConfiguration imageConfig) { + String network = imageConfig.getBuildConfiguration().getNetwork(); + if (network == null) { + network = System.getProperty("docker.network.mode"); + } + if (network == null) { + network = System.getProperty("docker.build.network"); + } + if(network!=null && network.isEmpty()) { + network = null; + } + return network; + } + public static boolean isNoCache(ImageConfiguration imageConfig) { String noCache = System.getProperty("docker.noCache"); if (noCache == null) { diff --git a/src/main/java/io/fabric8/maven/docker/service/BuildXService.java b/src/main/java/io/fabric8/maven/docker/service/BuildXService.java index 9bf5a228a..f1b077582 100644 --- a/src/main/java/io/fabric8/maven/docker/service/BuildXService.java +++ b/src/main/java/io/fabric8/maven/docker/service/BuildXService.java @@ -169,6 +169,11 @@ protected void buildX(List buildX, String builderName, BuildDirs buildDi cmdLine.add("--no-cache"); } + String networkMode = ConfigHelper.getNetwork(imageConfig); + if (networkMode!=null) { + cmdLine.add("--network="+networkMode); + } + BuildXConfiguration buildXConfiguration = buildConfiguration.getBuildX(); AttestationConfiguration attestations = buildXConfiguration.getAttestations(); if (attestations != null) { diff --git a/src/test/java/io/fabric8/maven/docker/service/BuildXServiceTest.java b/src/test/java/io/fabric8/maven/docker/service/BuildXServiceTest.java index eef98b335..d84ef7824 100644 --- a/src/test/java/io/fabric8/maven/docker/service/BuildXServiceTest.java +++ b/src/test/java/io/fabric8/maven/docker/service/BuildXServiceTest.java @@ -126,6 +126,19 @@ void testBuildNativePlatformWithForeign() throws Exception { verifyBuildXPlatforms(NATIVE); } + @Test + void testNetworkIsPropagatedToBuildx() throws Exception { + + //Given + buildConfigUsingBuildx(temporaryFolder, (buildX, buildImage) -> buildImage.network("host")); + + // When + buildx.build(projectPaths, imageConfig, configuredRegistry, authConfigList, buildArchive); + + //Then + verifyBuildXArgumentPresentInExec("--network=host"); + } + @Test void testNoCacheIsPropagatedToBuildx() throws Exception {