From 323a2966ed50c38168372080d56771c36d9dc0bf Mon Sep 17 00:00:00 2001 From: Samruddhi Khandale Date: Mon, 12 Feb 2024 16:55:51 +0000 Subject: [PATCH 1/4] Docker-outside-of-docker: Fix moby-buildx errors --- .../devcontainer-feature.json | 7 +++++- src/docker-outside-of-docker/install.sh | 24 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/docker-outside-of-docker/devcontainer-feature.json b/src/docker-outside-of-docker/devcontainer-feature.json index 4e5eae721..78ad1162c 100644 --- a/src/docker-outside-of-docker/devcontainer-feature.json +++ b/src/docker-outside-of-docker/devcontainer-feature.json @@ -1,6 +1,6 @@ { "id": "docker-outside-of-docker", - "version": "1.3.2", + "version": "1.4.0", "name": "Docker (docker-outside-of-docker)", "documentationURL": "https://github.com/devcontainers/features/tree/main/src/docker-outside-of-docker", "description": "Re-use the host docker socket, adding the Docker CLI to a container. Feature invokes a script to enable using a forwarded Docker socket within a container to run Docker commands.", @@ -20,6 +20,11 @@ "default": true, "description": "Install OSS Moby build instead of Docker CE" }, + "mobyBuildxVersion": { + "type": "string", + "default": "0.12.0", + "description": "Install a specific version of moby-buildx when using Moby. (2024-02-09: Microsoft's Package Manifest has mismatching filesize and SHA for 0.12.1; default is last known good version)" + }, "dockerDashComposeVersion": { "type": "string", "enum": [ diff --git a/src/docker-outside-of-docker/install.sh b/src/docker-outside-of-docker/install.sh index 901dd7870..988b7e43c 100755 --- a/src/docker-outside-of-docker/install.sh +++ b/src/docker-outside-of-docker/install.sh @@ -9,6 +9,7 @@ DOCKER_VERSION="${VERSION:-"latest"}" USE_MOBY="${MOBY:-"true"}" +MOBY_BUILDX_VERSION="${MOBYBUILDXVERSION}" DOCKER_DASH_COMPOSE_VERSION="${DOCKERDASHCOMPOSEVERSION:-"v1"}" # v1 or v2 or none ENABLE_NONROOT_DOCKER="${ENABLE_NONROOT_DOCKER:-"true"}" @@ -170,6 +171,27 @@ else echo "cli_version_suffix ${cli_version_suffix}" fi +# Version matching for moby-buildx +if [ "${USE_MOBY}" = "true" ]; then + if [ "${MOBY_BUILDX_VERSION}" = "latest" ]; then + # Empty, meaning grab whatever "latest" is in apt repo + buildx_version_suffix="" + else + buildx_version_dot_escaped="${MOBY_BUILDX_VERSION//./\\.}" + buildx_version_dot_plus_escaped="${buildx_version_dot_escaped//+/\\+}" + buildx_version_regex="^(.+:)?${buildx_version_dot_plus_escaped}([\\.\\+ ~:-]|$)" + set +e + buildx_version_suffix="=$(apt-cache madison moby-buildx | awk -F"|" '{print $2}' | sed -e 's/^[ \t]*//' | grep -E -m 1 "${buildx_version_regex}")" + set -e + if [ -z "${buildx_version_suffix}" ] || [ "${buildx_version_suffix}" = "=" ]; then + err "No full or partial moby-buildx version match found for \"${MOBY_BUILDX_VERSION}\" on OS ${ID} ${VERSION_CODENAME} (${architecture}). Available versions:" + apt-cache madison moby-buildx | awk -F"|" '{print $2}' | grep -oP '^(.+:)?\K.+' + exit 1 + fi + echo "buildx_version_suffix ${buildx_version_suffix}" + fi +fi + # Install Docker / Moby CLI if not already installed if type docker > /dev/null 2>&1; then echo "Docker / Moby CLI already installed." @@ -177,7 +199,7 @@ else if [ "${USE_MOBY}" = "true" ]; then buildx=() if [ "${INSTALL_DOCKER_BUILDX}" = "true" ]; then - buildx=(moby-buildx) + buildx=(moby-buildx${buildx_version_suffix}) fi apt-get -y install --no-install-recommends ${cli_package_name}${cli_version_suffix} "${buildx[@]}" apt-get -y install --no-install-recommends moby-compose || echo "(*) Package moby-compose (Docker Compose v2) not available for OS ${ID} ${VERSION_CODENAME} (${architecture}). Skipping." From ea05a2f3105e5d95b20a86ddf1a307c9205d29e1 Mon Sep 17 00:00:00 2001 From: Samruddhi Khandale Date: Mon, 12 Feb 2024 17:51:20 +0000 Subject: [PATCH 2/4] test debugging --- test/docker-outside-of-docker/docker_init.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/docker-outside-of-docker/docker_init.sh b/test/docker-outside-of-docker/docker_init.sh index b47285ead..da0910f4f 100644 --- a/test/docker-outside-of-docker/docker_init.sh +++ b/test/docker-outside-of-docker/docker_init.sh @@ -5,6 +5,9 @@ set -e # Optional: Import test library source dev-container-features-test-lib +echo "contents cat /tmp/vscr-docker-from-docker.log" +cat cat /tmp/vscr-docker-from-docker.log + check "docker buildx" bash -c "docker buildx version" check "docker compose" bash -c "docker compose version" check "docker-compose" bash -c "docker-compose --version" @@ -12,6 +15,11 @@ check "docker-compose" bash -c "docker-compose --version" check "docker-init-exists" bash -c "ls /usr/local/share/docker-init.sh" check "log-exists" bash -c "ls /tmp/vscr-docker-from-docker.log" check "log-contents-for-success" bash -c "cat /tmp/vscr-docker-from-docker.log | grep 'Success'" + +sleep 5s +echo "contents cat /tmp/vscr-docker-from-docker.log" +cat cat /tmp/vscr-docker-from-docker.log + check "log-contents" bash -c "cat /tmp/vscr-docker-from-docker.log | grep 'Proxying /var/run/docker-host.sock to /var/run/docker.sock for vscode'" check "docker-ps" bash -c "docker ps >/dev/null" From 1d8baad70821fe8a332287e278f4eebd9696f4f8 Mon Sep 17 00:00:00 2001 From: Samruddhi Khandale Date: Mon, 12 Feb 2024 18:01:41 +0000 Subject: [PATCH 3/4] fix test --- test/docker-outside-of-docker/docker_init.sh | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/test/docker-outside-of-docker/docker_init.sh b/test/docker-outside-of-docker/docker_init.sh index da0910f4f..7c4af2454 100644 --- a/test/docker-outside-of-docker/docker_init.sh +++ b/test/docker-outside-of-docker/docker_init.sh @@ -5,9 +5,6 @@ set -e # Optional: Import test library source dev-container-features-test-lib -echo "contents cat /tmp/vscr-docker-from-docker.log" -cat cat /tmp/vscr-docker-from-docker.log - check "docker buildx" bash -c "docker buildx version" check "docker compose" bash -c "docker compose version" check "docker-compose" bash -c "docker-compose --version" @@ -16,11 +13,7 @@ check "docker-init-exists" bash -c "ls /usr/local/share/docker-init.sh" check "log-exists" bash -c "ls /tmp/vscr-docker-from-docker.log" check "log-contents-for-success" bash -c "cat /tmp/vscr-docker-from-docker.log | grep 'Success'" -sleep 5s -echo "contents cat /tmp/vscr-docker-from-docker.log" -cat cat /tmp/vscr-docker-from-docker.log - -check "log-contents" bash -c "cat /tmp/vscr-docker-from-docker.log | grep 'Proxying /var/run/docker-host.sock to /var/run/docker.sock for vscode'" +check "log-contents" bash -c "cat /tmp/vscr-docker-from-docker.log | grep 'Ensuring vscode has access to /var/run/docker-host.sock via /var/run/docker.sock" check "docker-ps" bash -c "docker ps >/dev/null" # Report result From 0bf8c0e345713fb4f622a8f99351469164007f3a Mon Sep 17 00:00:00 2001 From: Samruddhi Khandale Date: Mon, 12 Feb 2024 18:09:12 +0000 Subject: [PATCH 4/4] nit --- test/docker-outside-of-docker/docker_init.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/docker-outside-of-docker/docker_init.sh b/test/docker-outside-of-docker/docker_init.sh index 7c4af2454..88153c1e0 100644 --- a/test/docker-outside-of-docker/docker_init.sh +++ b/test/docker-outside-of-docker/docker_init.sh @@ -13,7 +13,7 @@ check "docker-init-exists" bash -c "ls /usr/local/share/docker-init.sh" check "log-exists" bash -c "ls /tmp/vscr-docker-from-docker.log" check "log-contents-for-success" bash -c "cat /tmp/vscr-docker-from-docker.log | grep 'Success'" -check "log-contents" bash -c "cat /tmp/vscr-docker-from-docker.log | grep 'Ensuring vscode has access to /var/run/docker-host.sock via /var/run/docker.sock" +check "log-contents" bash -c "cat /tmp/vscr-docker-from-docker.log | grep 'Ensuring vscode has access to /var/run/docker-host.sock via /var/run/docker.sock'" check "docker-ps" bash -c "docker ps >/dev/null" # Report result