From 203e4111fad390836a4ff9116ba06660831f219a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 5 May 2026 08:26:10 +0000 Subject: [PATCH 1/7] Initial plan From 38eb552894cf594672372206aafb32f49d1f8aaf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 5 May 2026 08:28:21 +0000 Subject: [PATCH 2/7] fix: support Ubuntu 26.04 (plucky) by checking iptables-legacy works before switching, falling back to iptables-nft Agent-Logs-Url: https://github.com/devcontainers/features/sessions/af4f00a5-8bfc-472b-97e3-735ddf7a07c1 Co-authored-by: Kaniska244 <186041440+Kaniska244@users.noreply.github.com> --- src/docker-in-docker/install.sh | 15 ++++++++++----- .../docker_build_ubuntu_plucky.sh | 14 ++++++++++++++ test/docker-in-docker/scenarios.json | 10 ++++++++++ 3 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 test/docker-in-docker/docker_build_ubuntu_plucky.sh diff --git a/src/docker-in-docker/install.sh b/src/docker-in-docker/install.sh index 5af320b0b..fe841ea5f 100755 --- a/src/docker-in-docker/install.sh +++ b/src/docker-in-docker/install.sh @@ -19,8 +19,8 @@ INSTALL_DOCKER_BUILDX="${INSTALLDOCKERBUILDX:-"true"}" INSTALL_DOCKER_COMPOSE_SWITCH="${INSTALLDOCKERCOMPOSESWITCH:-"false"}" MICROSOFT_GPG_KEYS_URI="https://packages.microsoft.com/keys/microsoft.asc" MICROSOFT_GPG_KEYS_ROLLING_URI="https://packages.microsoft.com/keys/microsoft-rolling.asc" -DOCKER_MOBY_ARCHIVE_VERSION_CODENAMES="trixie bookworm buster bullseye bionic focal jammy noble" -DOCKER_LICENSED_ARCHIVE_VERSION_CODENAMES="trixie bookworm buster bullseye bionic focal hirsute impish jammy noble" +DOCKER_MOBY_ARCHIVE_VERSION_CODENAMES="trixie bookworm buster bullseye bionic focal jammy noble plucky" +DOCKER_LICENSED_ARCHIVE_VERSION_CODENAMES="trixie bookworm buster bullseye bionic focal hirsute impish jammy noble plucky" DISABLE_IP6_TABLES="${DISABLEIP6TABLES:-false}" # Default: Exit on any failure. @@ -311,9 +311,14 @@ if [ "${ADJUSTED_ID}" = "debian" ] && command -v update-ca-certificates > /dev/n fi # Swap to legacy iptables for compatibility (Debian only) -if [ "${ADJUSTED_ID}" = "debian" ] && type iptables-legacy > /dev/null 2>&1; then - update-alternatives --set iptables /usr/sbin/iptables-legacy - update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy +if [ "${ADJUSTED_ID}" = "debian" ]; then + if type iptables-legacy > /dev/null 2>&1 && iptables-legacy -nL > /dev/null 2>&1; then + update-alternatives --set iptables /usr/sbin/iptables-legacy + update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy + elif type iptables-nft > /dev/null 2>&1; then + update-alternatives --set iptables /usr/sbin/iptables-nft + update-alternatives --set ip6tables /usr/sbin/ip6tables-nft + fi fi # Set up the necessary repositories diff --git a/test/docker-in-docker/docker_build_ubuntu_plucky.sh b/test/docker-in-docker/docker_build_ubuntu_plucky.sh new file mode 100644 index 000000000..c9fd7affc --- /dev/null +++ b/test/docker-in-docker/docker_build_ubuntu_plucky.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -e + +# Optional: Import test library +source dev-container-features-test-lib + +# Definition specific tests +check "docker-buildx" docker buildx version +check "docker-build" docker build ./ +check "docker-buildx-path" bash -c "ls -la /usr/libexec/docker/cli-plugins/docker-buildx" + +# Report result +reportResults diff --git a/test/docker-in-docker/scenarios.json b/test/docker-in-docker/scenarios.json index baeaa6769..cb7a2aa18 100644 --- a/test/docker-in-docker/scenarios.json +++ b/test/docker-in-docker/scenarios.json @@ -154,6 +154,16 @@ } } }, + "docker_build_ubuntu_plucky": { + "image": "ubuntu:plucky", + "features": { + "docker-in-docker": { + "version": "latest", + "installDockerBuildx": true, + "dockerDashComposeVersion": "v2" + } + } + }, "docker_specific_moby_buildx": { "image": "ubuntu:noble", "features": { From 02a73839e2e16b0e7e61cdfd41e3d781a0105ffc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 5 May 2026 08:28:58 +0000 Subject: [PATCH 3/7] fix: also verify iptables-nft works before switching to it Agent-Logs-Url: https://github.com/devcontainers/features/sessions/af4f00a5-8bfc-472b-97e3-735ddf7a07c1 Co-authored-by: Kaniska244 <186041440+Kaniska244@users.noreply.github.com> --- src/docker-in-docker/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docker-in-docker/install.sh b/src/docker-in-docker/install.sh index fe841ea5f..fe261fe7b 100755 --- a/src/docker-in-docker/install.sh +++ b/src/docker-in-docker/install.sh @@ -315,7 +315,7 @@ if [ "${ADJUSTED_ID}" = "debian" ]; then if type iptables-legacy > /dev/null 2>&1 && iptables-legacy -nL > /dev/null 2>&1; then update-alternatives --set iptables /usr/sbin/iptables-legacy update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy - elif type iptables-nft > /dev/null 2>&1; then + elif type iptables-nft > /dev/null 2>&1 && iptables-nft -nL > /dev/null 2>&1; then update-alternatives --set iptables /usr/sbin/iptables-nft update-alternatives --set ip6tables /usr/sbin/ip6tables-nft fi From 77dbcc3bb38c7a40c050efdb9cf242c586837cf1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 5 May 2026 08:36:59 +0000 Subject: [PATCH 4/7] fix: use correct Ubuntu 26.04 codename 'resolute' instead of 'plucky' Agent-Logs-Url: https://github.com/devcontainers/features/sessions/60277e16-b948-4f67-8140-1d3f1cda6941 Co-authored-by: Kaniska244 <186041440+Kaniska244@users.noreply.github.com> --- src/docker-in-docker/install.sh | 4 ++-- ...build_ubuntu_plucky.sh => docker_build_ubuntu_resolute.sh} | 0 test/docker-in-docker/scenarios.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename test/docker-in-docker/{docker_build_ubuntu_plucky.sh => docker_build_ubuntu_resolute.sh} (100%) diff --git a/src/docker-in-docker/install.sh b/src/docker-in-docker/install.sh index fe261fe7b..b20b73073 100755 --- a/src/docker-in-docker/install.sh +++ b/src/docker-in-docker/install.sh @@ -19,8 +19,8 @@ INSTALL_DOCKER_BUILDX="${INSTALLDOCKERBUILDX:-"true"}" INSTALL_DOCKER_COMPOSE_SWITCH="${INSTALLDOCKERCOMPOSESWITCH:-"false"}" MICROSOFT_GPG_KEYS_URI="https://packages.microsoft.com/keys/microsoft.asc" MICROSOFT_GPG_KEYS_ROLLING_URI="https://packages.microsoft.com/keys/microsoft-rolling.asc" -DOCKER_MOBY_ARCHIVE_VERSION_CODENAMES="trixie bookworm buster bullseye bionic focal jammy noble plucky" -DOCKER_LICENSED_ARCHIVE_VERSION_CODENAMES="trixie bookworm buster bullseye bionic focal hirsute impish jammy noble plucky" +DOCKER_MOBY_ARCHIVE_VERSION_CODENAMES="trixie bookworm buster bullseye bionic focal jammy noble resolute" +DOCKER_LICENSED_ARCHIVE_VERSION_CODENAMES="trixie bookworm buster bullseye bionic focal hirsute impish jammy noble resolute" DISABLE_IP6_TABLES="${DISABLEIP6TABLES:-false}" # Default: Exit on any failure. diff --git a/test/docker-in-docker/docker_build_ubuntu_plucky.sh b/test/docker-in-docker/docker_build_ubuntu_resolute.sh similarity index 100% rename from test/docker-in-docker/docker_build_ubuntu_plucky.sh rename to test/docker-in-docker/docker_build_ubuntu_resolute.sh diff --git a/test/docker-in-docker/scenarios.json b/test/docker-in-docker/scenarios.json index cb7a2aa18..eb1b57aaa 100644 --- a/test/docker-in-docker/scenarios.json +++ b/test/docker-in-docker/scenarios.json @@ -154,8 +154,8 @@ } } }, - "docker_build_ubuntu_plucky": { - "image": "ubuntu:plucky", + "docker_build_ubuntu_resolute": { + "image": "ubuntu:resolute", "features": { "docker-in-docker": { "version": "latest", From 6fc10b9232eca747b248d4b5faa681caaca2bc54 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 5 May 2026 08:40:59 +0000 Subject: [PATCH 5/7] chore: bump docker-in-docker feature version to 2.17.0 Agent-Logs-Url: https://github.com/devcontainers/features/sessions/f340a34b-66fa-45bd-85f2-94b32c943241 Co-authored-by: Kaniska244 <186041440+Kaniska244@users.noreply.github.com> --- src/docker-in-docker/devcontainer-feature.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docker-in-docker/devcontainer-feature.json b/src/docker-in-docker/devcontainer-feature.json index 4c792e8f4..bdb4cb291 100644 --- a/src/docker-in-docker/devcontainer-feature.json +++ b/src/docker-in-docker/devcontainer-feature.json @@ -1,6 +1,6 @@ { "id": "docker-in-docker", - "version": "2.16.1", + "version": "2.17.0", "name": "Docker (Docker-in-Docker)", "documentationURL": "https://github.com/devcontainers/features/tree/main/src/docker-in-docker", "description": "Create child containers *inside* a container, independent from the host's docker instance. Installs Docker extension in the container along with needed CLIs.", From ab61fecf19b8f40d1a9c9914246e8c89ed5cbe3e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 5 May 2026 08:55:17 +0000 Subject: [PATCH 6/7] test: set moby: false for resolute test scenario Agent-Logs-Url: https://github.com/devcontainers/features/sessions/ce62c78c-ff28-4766-bd7f-2b5a57a349ec Co-authored-by: Kaniska244 <186041440+Kaniska244@users.noreply.github.com> --- test/docker-in-docker/scenarios.json | 1 + 1 file changed, 1 insertion(+) diff --git a/test/docker-in-docker/scenarios.json b/test/docker-in-docker/scenarios.json index eb1b57aaa..177d82972 100644 --- a/test/docker-in-docker/scenarios.json +++ b/test/docker-in-docker/scenarios.json @@ -158,6 +158,7 @@ "image": "ubuntu:resolute", "features": { "docker-in-docker": { + "moby": false, "version": "latest", "installDockerBuildx": true, "dockerDashComposeVersion": "v2" From 75d23c2845a9cb138e314ff42f0dea975e55c059 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 5 May 2026 09:22:49 +0000 Subject: [PATCH 7/7] docs: note Ubuntu Resolute exceptional behavior in NOTES.md Agent-Logs-Url: https://github.com/devcontainers/features/sessions/8983ff12-365e-49de-bd65-47614caf8539 Co-authored-by: Kaniska244 <186041440+Kaniska244@users.noreply.github.com> --- src/docker-in-docker/NOTES.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/docker-in-docker/NOTES.md b/src/docker-in-docker/NOTES.md index c7fb26137..797bbcc81 100644 --- a/src/docker-in-docker/NOTES.md +++ b/src/docker-in-docker/NOTES.md @@ -15,4 +15,6 @@ This Feature should work on recent versions of Debian/Ubuntu-based distributions Debian Trixie (13) does not include moby-cli and related system packages, so the feature cannot install with "moby": "true". To use this feature on Trixie, please set "moby": "false" or choose a different base image (for example, Ubuntu 24.04). +Ubuntu 26.04 (Resolute) does not currently have moby packages available, so the feature cannot install with "moby": "true". To use this feature on Resolute, please set "moby": "false". Additionally, the kernel on Ubuntu 26.04 no longer supports legacy iptables NAT tables, so the feature automatically falls back to `iptables-nft` when `iptables-legacy` is not functional. + `bash` is required to execute the `install.sh` script.