Skip to content
16 changes: 15 additions & 1 deletion data/containers/patches.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,10 @@ buildx:
compose:
# Note on patches:
# https://github.com/docker/compose/pull/13214 - test: Set stop_signal to SIGTERM
# https://github.com/docker/compose/pull/13564 - test: fix pull failure assertion for Docker v29
opensuse-Tumbleweed:
GITHUB_PATCHES:
- 13564
sle-16.1:
GITHUB_PATCHES:
- 13214
Expand All @@ -109,16 +112,26 @@ conmon:
- 579
docker-py:
# Note on patches:
# https://github.com/docker/docker-py/pull/3261 - Bump default API version to 1.45 (Moby 26.0/26.1)
# https://github.com/docker/docker-py/pull/3290 - tests/exec: expect 127 exit code for missing executable
# https://github.com/docker/docker-py/pull/3354 - tests: Fix deprecation warning for utcfromtimestamp()
# https://github.com/docker/docker-py/pull/3362 - test/integration: don't check for deprecated Networks field
# https://github.com/docker/docker-py/pull/3366 - test: Skip from_env_unix tests if DOCKER_HOST is network socket
# https://github.com/docker/docker-py/pull/3367 - tests/integration: Make the tests runnable on SELinux enabled daemon
# https://github.com/docker/docker-py/pull/3372 - test_connect_with_ipv6_address: enable IPv6
# https://github.com/docker/docker-py/pull/3373 - test_create_with_ipv6_address: enable IPv6
# https://github.com/docker/docker-py/pull/3380 - integration: Remove test_build_squash tests
opensuse-Tumbleweed:
GITHUB_PATCHES:
- 3261
- 3290
- 3354
- 3362
- 3366
- 3367
- 3372
- 3373
- 3380
sle-16.1:
GITHUB_PATCHES:
- 3290
Expand All @@ -136,11 +149,12 @@ moby:
# https://github.com/moby/moby/pull/51219 - integration/container: Make tests runnable on SELinux enabled daemon
# https://github.com/moby/moby/pull/51263 - integration: Skip some tests as rootless
# https://github.com/moby/moby/pull/51794 - integration: Support iputils ping
# https://github.com/moby/moby/pull/51970 - Skip some tests as rootless when SELinux is enabled
opensuse-Tumbleweed:
GITHUB_PATCHES:
- 51219
- 51263
- 51794
- 51970
sle-16.1:
GITHUB_PATCHES:
- 51219
Expand Down
33 changes: 33 additions & 0 deletions data/containers/patches/compose/13564.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
From eadc20444aac50267019021d8d554a9ce34692f6 Mon Sep 17 00:00:00 2001
From: Ricardo Branco <rbranco@suse.de>
Date: Fri, 30 Jan 2026 19:11:06 +0100
Subject: [PATCH] test: fix pull failure assertion for Docker v29

The error message comes now from containerd.

Signed-off-by: Ricardo Branco <rbranco@suse.de>
---
pkg/e2e/pull_test.go | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/pkg/e2e/pull_test.go b/pkg/e2e/pull_test.go
index 799bdbb2fc7..61550e4ca12 100644
--- a/pkg/e2e/pull_test.go
+++ b/pkg/e2e/pull_test.go
@@ -66,7 +66,15 @@ func TestComposePull(t *testing.T) {

t.Run("Verify pull failure", func(t *testing.T) {
res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", "fixtures/compose-pull/unknown-image", "pull")
- res.Assert(t, icmd.Expected{ExitCode: 1, Err: "pull access denied for does_not_exists"})
+ output := res.Combined()
+
+ errMsg := "pull access denied for does_not_exists"
+ if !strings.Contains(output, errMsg) {
+ // containerd returns:
+ // failed to resolve reference "docker.io/library/does_not_exists:latest": docker.io/library/does_not_exists:latest: not found
+ errMsg = "does_not_exists:latest: not found"
+ }
+ res.Assert(t, icmd.Expected{ExitCode: 1, Err: errMsg})
})

t.Run("Verify ignore pull failure", func(t *testing.T) {
152 changes: 152 additions & 0 deletions data/containers/patches/docker-py/3362.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
From b520fb89514ce9e1b8cfd7527485ece588a90f6b Mon Sep 17 00:00:00 2001
From: Sebastiaan van Stijn <github@gone.nl>
Date: Tue, 14 Oct 2025 18:36:34 +0200
Subject: [PATCH] test/integration: don't check for deprecated Networks field

These tests depended on the deprecated Spec.Networks field, which
is no longer part of current API versions, causing the test to
fail;

=================================== FAILURES ===================================
_____________ ServiceTest.test_create_service_with_custom_networks _____________
tests/integration/api_service_test.py:379: in test_create_service_with_custom_networks
assert 'Networks' in svc_info['Spec']
E AssertionError: assert 'Networks' in {'Labels': {}, 'Mode': {'Replicated': {'Replicas': 1}}, 'Name': 'dockerpytest_a538894175d07404', 'TaskTemplate': {'Con...pec': {'Command': ['true'], 'Image': 'alpine:3.10', 'Isolation': 'default'}, 'ForceUpdate': 0, 'Runtime': 'container'}}
____________ ServiceTest.test_update_service_with_defaults_networks ____________
tests/integration/api_service_test.py:1128: in test_update_service_with_defaults_networks
assert 'Networks' in svc_info['Spec']
E AssertionError: assert 'Networks' in {'Labels': {}, 'Mode': {'Replicated': {'Replicas': 1}}, 'Name': 'dockerpytest_6d8e30f359c0f5e', 'TaskTemplate': {'Cont...pec': {'Command': ['true'], 'Image': 'alpine:3.10', 'Isolation': 'default'}, 'ForceUpdate': 0, 'Runtime': 'container'}}
_____________ ServiceTest.test_update_service_with_network_change ______________
tests/integration/api_service_test.py:1333: in test_update_service_with_network_change
assert 'Networks' in svc_info['Spec']
E AssertionError: assert 'Networks' in {'Labels': {}, 'Mode': {'Replicated': {'Replicas': 1}}, 'Name': 'dockerpytest_d4e23667cdbaf159', 'TaskTemplate': {'Con... {'Command': ['echo', 'hello'], 'Image': 'busybox', 'Isolation': 'default'}, 'ForceUpdate': 0, 'Runtime': 'container'}}
------- generated xml file: /src/bundles/test-docker-py/junit-report.xml -------
=========================== short test summary info ============================

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
---
tests/integration/api_service_test.py | 56 +++++++++++++++++----------
1 file changed, 35 insertions(+), 21 deletions(-)

diff --git a/tests/integration/api_service_test.py b/tests/integration/api_service_test.py
index d670968786..ba67c6d538 100644
--- a/tests/integration/api_service_test.py
+++ b/tests/integration/api_service_test.py
@@ -367,16 +367,18 @@ def test_create_service_with_custom_networks(self):
)
self.tmp_networks.append(net2['Id'])
container_spec = docker.types.ContainerSpec(TEST_IMG, ['true'])
- task_tmpl = docker.types.TaskTemplate(container_spec)
- name = self.get_service_name()
- svc_id = self.client.create_service(
- task_tmpl, name=name, networks=[
+ task_tmpl = docker.types.TaskTemplate(
+ container_spec, networks=[
'dockerpytest_1', {'Target': 'dockerpytest_2'}
]
)
+ name = self.get_service_name()
+ svc_id = self.client.create_service(
+ task_tmpl, name=name
+ )
svc_info = self.client.inspect_service(svc_id)
- assert 'Networks' in svc_info['Spec']
- assert svc_info['Spec']['Networks'] == [
+ assert 'Networks' in svc_info['Spec']['TaskTemplate']
+ assert svc_info['Spec']['TaskTemplate']['Networks'] == [
{'Target': net1['Id']}, {'Target': net2['Id']}
]

@@ -1116,16 +1118,18 @@ def test_update_service_with_defaults_networks(self):
)
self.tmp_networks.append(net2['Id'])
container_spec = docker.types.ContainerSpec(TEST_IMG, ['true'])
- task_tmpl = docker.types.TaskTemplate(container_spec)
- name = self.get_service_name()
- svc_id = self.client.create_service(
- task_tmpl, name=name, networks=[
+ task_tmpl = docker.types.TaskTemplate(
+ container_spec, networks=[
'dockerpytest_1', {'Target': 'dockerpytest_2'}
]
)
+ name = self.get_service_name()
+ svc_id = self.client.create_service(
+ task_tmpl, name=name
+ )
svc_info = self.client.inspect_service(svc_id)
- assert 'Networks' in svc_info['Spec']
- assert svc_info['Spec']['Networks'] == [
+ assert 'Networks' in svc_info['Spec']['TaskTemplate']
+ assert svc_info['Spec']['TaskTemplate']['Networks'] == [
{'Target': net1['Id']}, {'Target': net2['Id']}
]

@@ -1143,8 +1147,11 @@ def test_update_service_with_defaults_networks(self):
{'Target': net1['Id']}, {'Target': net2['Id']}
]

+ task_tmpl = docker.types.TaskTemplate(
+ container_spec, networks=[net1['Id']]
+ )
self._update_service(
- svc_id, name, new_index, networks=[net1['Id']],
+ svc_id, name, new_index, task_tmpl,
fetch_current_spec=True
)
svc_info = self.client.inspect_service(svc_id)
@@ -1313,7 +1320,6 @@ def test_update_service_with_network_change(self):
container_spec = docker.types.ContainerSpec(
'busybox', ['echo', 'hello']
)
- task_tmpl = docker.types.TaskTemplate(container_spec)
net1 = self.client.create_network(
self.get_service_name(), driver='overlay',
ipam={'Driver': 'default'}
@@ -1324,22 +1330,27 @@ def test_update_service_with_network_change(self):
ipam={'Driver': 'default'}
)
self.tmp_networks.append(net2['Id'])
+ task_tmpl = docker.types.TaskTemplate(
+ container_spec, networks=[net1['Id']]
+ )
name = self.get_service_name()
svc_id = self.client.create_service(
- task_tmpl, name=name, networks=[net1['Id']]
+ task_tmpl, name=name
)
svc_info = self.client.inspect_service(svc_id)
- assert 'Networks' in svc_info['Spec']
- assert len(svc_info['Spec']['Networks']) > 0
- assert svc_info['Spec']['Networks'][0]['Target'] == net1['Id']
+ assert 'Networks' in svc_info['Spec']['TaskTemplate']
+ assert len(svc_info['Spec']['TaskTemplate']['Networks']) > 0
+ assert svc_info['Spec']['TaskTemplate']['Networks'][0]['Target'] == net1['Id']

svc_info = self.client.inspect_service(svc_id)
version_index = svc_info['Version']['Index']

- task_tmpl = docker.types.TaskTemplate(container_spec)
+ task_tmpl = docker.types.TaskTemplate(
+ container_spec, networks=[net2['Id']]
+ )
self._update_service(
svc_id, name, version_index, task_tmpl, name=name,
- networks=[net2['Id']], fetch_current_spec=True
+ fetch_current_spec=True
)
svc_info = self.client.inspect_service(svc_id)
task_template = svc_info['Spec']['TaskTemplate']
@@ -1351,8 +1362,11 @@ def test_update_service_with_network_change(self):
new_index = svc_info['Version']['Index']
assert new_index > version_index

+ task_tmpl = docker.types.TaskTemplate(
+ container_spec, networks=[net1['Id']]
+ )
self._update_service(
- svc_id, name, new_index, name=name, networks=[net1['Id']],
+ svc_id, name, new_index, task_tmpl, name=name,
fetch_current_spec=True
)
svc_info = self.client.inspect_service(svc_id)
22 changes: 22 additions & 0 deletions data/containers/patches/docker-py/3372.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
From 1d882c58113f9d831593ded11d49961cbec1c7ee Mon Sep 17 00:00:00 2001
From: Rob Murray <rob.murray@docker.com>
Date: Sun, 23 Nov 2025 17:11:08 +0000
Subject: [PATCH] test_connect_with_ipv6_address: enable IPv6

Signed-off-by: Rob Murray <rob.murray@docker.com>
---
tests/integration/api_network_test.py | 1 +
1 file changed, 1 insertion(+)

diff --git a/tests/integration/api_network_test.py b/tests/integration/api_network_test.py
index ce2e8ea4c3..908b00b2bc 100644
--- a/tests/integration/api_network_test.py
+++ b/tests/integration/api_network_test.py
@@ -384,6 +384,7 @@ def test_connect_with_ipv4_address(self):
@requires_api_version('1.22')
def test_connect_with_ipv6_address(self):
net_name, net_id = self.create_network(
+ enable_ipv6=True,
ipam=IPAMConfig(
driver='default',
pool_configs=[
22 changes: 22 additions & 0 deletions data/containers/patches/docker-py/3373.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
From ddcd1f717551a30db8c8c0afb4e03814036236d6 Mon Sep 17 00:00:00 2001
From: Rob Murray <rob.murray@docker.com>
Date: Mon, 24 Nov 2025 11:56:51 +0000
Subject: [PATCH] test_create_with_ipv6_address: enable IPv6

Signed-off-by: Rob Murray <rob.murray@docker.com>
---
tests/integration/api_network_test.py | 1 +
1 file changed, 1 insertion(+)

diff --git a/tests/integration/api_network_test.py b/tests/integration/api_network_test.py
index 908b00b2b..070282d24 100644
--- a/tests/integration/api_network_test.py
+++ b/tests/integration/api_network_test.py
@@ -232,6 +232,7 @@ def test_create_with_ipv4_address(self):
@requires_api_version('1.22')
def test_create_with_ipv6_address(self):
net_name, net_id = self.create_network(
+ enable_ipv6=True,
ipam=IPAMConfig(
driver='default',
pool_configs=[IPAMPool(subnet="2001:389::/64")],
Loading