From 11d8aa1f1be7a485b36f28ee4d089304e83508e9 Mon Sep 17 00:00:00 2001 From: Florian Apolloner Date: Mon, 6 Jan 2025 22:28:45 +0100 Subject: [PATCH] Set network ID if available during container inspect. Fixes #24910 Signed-off-by: Florian Apolloner --- contrib/cirrus/setup_environment.sh | 2 +- libpod/networking_common.go | 14 ++++++++++++-- test/compose/uptwice_idempotent/docker-compose.yml | 9 +++++++++ test/compose/uptwice_idempotent/tests.sh | 12 ++++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 test/compose/uptwice_idempotent/docker-compose.yml create mode 100644 test/compose/uptwice_idempotent/tests.sh diff --git a/contrib/cirrus/setup_environment.sh b/contrib/cirrus/setup_environment.sh index 2314f575b0..39be7551a0 100755 --- a/contrib/cirrus/setup_environment.sh +++ b/contrib/cirrus/setup_environment.sh @@ -383,7 +383,7 @@ case "$TEST_FLAVOR" in ;; compose_v2) showrun dnf -y remove docker-compose - showrun curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose + showrun curl -SL https://github.com/docker/compose/releases/download/v2.31.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose showrun chmod +x /usr/local/bin/docker-compose ;& # Continue with next item apiv2) diff --git a/libpod/networking_common.go b/libpod/networking_common.go index bac0d48622..9c0a4385c8 100644 --- a/libpod/networking_common.go +++ b/libpod/networking_common.go @@ -242,8 +242,13 @@ func (c *Container) getContainerNetworkInfo() (*define.InspectNetworkSettings, e if len(networks) > 0 { settings.Networks = make(map[string]*define.InspectAdditionalNetwork, len(networks)) for net, opts := range networks { + netID := net + network, err := c.runtime.network.NetworkInspect(net) + if err == nil { + netID = network.ID + } cniNet := new(define.InspectAdditionalNetwork) - cniNet.NetworkID = net + cniNet.NetworkID = netID cniNet.Aliases = opts.Aliases settings.Networks[net] = cniNet } @@ -272,9 +277,14 @@ func (c *Container) getContainerNetworkInfo() (*define.InspectNetworkSettings, e settings.Networks = make(map[string]*define.InspectAdditionalNetwork, len(networks)) for name, opts := range networks { + netID := name + network, err := c.runtime.network.NetworkInspect(name) + if err == nil { + netID = network.ID + } result := netStatus[name] addedNet := new(define.InspectAdditionalNetwork) - addedNet.NetworkID = name + addedNet.NetworkID = netID addedNet.Aliases = opts.Aliases addedNet.InspectBasicNetworkConfig = resultToBasicNetworkConfig(result) diff --git a/test/compose/uptwice_idempotent/docker-compose.yml b/test/compose/uptwice_idempotent/docker-compose.yml new file mode 100644 index 0000000000..9630a19edc --- /dev/null +++ b/test/compose/uptwice_idempotent/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3' +services: + app: + image: alpine + command: [sleep, infinity] + networks: + - net1 +networks: + net1: diff --git a/test/compose/uptwice_idempotent/tests.sh b/test/compose/uptwice_idempotent/tests.sh new file mode 100644 index 0000000000..a59f0d74ad --- /dev/null +++ b/test/compose/uptwice_idempotent/tests.sh @@ -0,0 +1,12 @@ +# -*- bash -*- + +CR=$'\r' +NL=$'\n' + +output=$(podman_compose up -d 2>&1) + +# Horrible output check here but we really want to make sure that there are +# no unexpected warning/errors and the normal messages are send on stderr as +# well so we cannot check for an empty stderr. +expected="Container uptwice_idempotent-app-1 Running${NL}" +is "$output" "$expected" "no container recreation in compose up (#24950)"