Skip to content

Conversation

@Kaniska244
Copy link
Contributor

Ref: https://github.com/github/codespaces/issues/22031

Description of changes:

  • The above codespace availability incident was created to address the multiple outages noticed in DockerHub registry which caused downtime for codepaces as devcontainer up and build commands injects syntax directive # syntax=docker/dockerfile:1.4 which forces devcontainer cli to download docker/dockerfile:1.4 parser image from DockerHub registry. This change was added in PR with #syntax directives + buildkit + user namespace remapping by auto-injecting the #syntax directive in dev container build. This is not required for docker engine version v23 onwards as the default moby buildkit version includes docker/dockerfile:1.4 or higher version of the parser. As part of this PR adding precautionary check to call DockerHub registry URL and confirm the availability before auto-injecting the #syntax directive.

Changelog:

  • Changed src/spec-node/utils.ts by changing the faulty error logging in retry function.
  • Added a new precautionary check as described above, in src/spec-node/containerFeatures.ts file.

Checklist:

  • All checks are passed.

@Kaniska244 Kaniska244 changed the title Adding precautionary check for dockerhub registry availability in dev container cli Adding precautionary check for DockerHub registry availability in dev container cli Nov 28, 2025
@Kaniska244 Kaniska244 marked this pull request as ready for review December 1, 2025 12:57
@Kaniska244 Kaniska244 requested a review from a team as a code owner December 1, 2025 12:57
@sam-byng sam-byng requested review from a team and sam-byng and removed request for a team December 1, 2025 14:25
sam-byng
sam-byng previously approved these changes Dec 1, 2025
Copy link
Contributor

@sam-byng sam-byng left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - I'm happy with this, if we've done sufficient testing

We could have made a general utility function in utils.ts to check the dockerhub auth/ registry access status, and placed the image name/version as variables, but i'm happy with this, can extend this in future if we need.

question: What testing have you done here? Can you update the PR description to state this?

sam-byng
sam-byng previously approved these changes Dec 1, 2025
@Kaniska244 Kaniska244 requested a review from sam-byng December 1, 2025 16:52
Copy link
Contributor

@sam-byng sam-byng left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks - looks better now ✅

@Kaniska244
Copy link
Contributor Author

Kaniska244 commented Dec 2, 2025

Docker compose with dev container configuration with Dockerfile and without any feature:

Dev container configuration configurations here

Expected Result: API call to check the availability of dockerfile frontend image in DockerHub registry shouldn’t happen and docker/dockerfile:1.4 image shouldn’t be referenced during execution as the syntax directive isn't explicitly included.

Actual Result: As it can be seen in the below log capture from the test workflow log , neither the API call nor the API call can be seen.

[2025-12-01T16:51:21.185Z] @devcontainers/cli 0.80.2. Node.js v18.20.8. linux 6.11.0-1018-azure x64.
[2025-12-01T16:51:21.185Z] Start: Run: docker buildx version
[2025-12-01T16:51:21.245Z] Stop (60 ms): Run: docker buildx version
[2025-12-01T16:51:21.245Z] github.com/docker/buildx v0.29.1 a32761aeb3debd39be1eca514af3693af0db334b
[2025-12-01T16:51:21.246Z] 
[2025-12-01T16:51:21.246Z] Start: Run: docker -v
[2025-12-01T16:51:21.259Z] Stop (13 ms): Run: docker -v
[2025-12-01T16:51:21.265Z] Start: Run: docker compose version --short
[2025-12-01T16:51:21.318Z] Stop (53 ms): Run: docker compose version --short
[2025-12-01T16:51:21.318Z] Docker Compose version: 2.38.2
[2025-12-01T16:51:21.318Z] Start: Run: docker compose -f /home/runner/work/cli/cli/src/test/configs/compose-image-without-features-minimal/.devcontainer/docker-compose.yml --profile * config
[2025-12-01T16:51:21.387Z] Stop (69 ms): Run: docker compose -f /home/runner/work/cli/cli/src/test/configs/compose-image-without-features-minimal/.devcontainer/docker-compose.yml --profile * config
[2025-12-01T16:51:21.387Z] name: devcontainer
services:
  app:
    command:
      - sleep
      - infinity
    image: ubuntu:latest
    networks:
      default: null
    volumes:
      - type: bind
        source: /home/runner/work/cli/cli/src/test/configs/compose-image-without-features-minimal
        target: /workspace
        bind:
          create_host_path: true
networks:
  default:
    name: devcontainer_default
[2025-12-01T16:51:21.392Z] Start: Run: docker compose -f /home/runner/work/cli/cli/src/test/configs/compose-image-without-features-minimal/.devcontainer/docker-compose.yml --profile * config
[2025-12-01T16:51:21.459Z] Stop (67 ms): Run: docker compose -f /home/runner/work/cli/cli/src/test/configs/compose-image-without-features-minimal/.devcontainer/docker-compose.yml --profile * config
[2025-12-01T16:51:21.459Z] name: devcontainer
services:
  app:
    command:
      - sleep
      - infinity
    image: ubuntu:latest
    networks:
      default: null
    volumes:
      - type: bind
        source: /home/runner/work/cli/cli/src/test/configs/compose-image-without-features-minimal
        target: /workspace
        bind:
          create_host_path: true
networks:
  default:
    name: devcontainer_default
[2025-12-01T16:51:21.460Z] Start: Run: docker inspect --type image ubuntu:latest
[2025-12-01T16:51:21.475Z] Stop (15 ms): Run: docker inspect --type image ubuntu:latest
[2025-12-01T16:51:21.475Z] > input: docker.io/library/ubuntu:latest
[2025-12-01T16:51:21.475Z] >
[2025-12-01T16:51:21.476Z] > resource: docker.io/library/ubuntu
[2025-12-01T16:51:21.476Z] > id: ubuntu
[2025-12-01T16:51:21.476Z] > owner: library
[2025-12-01T16:51:21.476Z] > namespace: library
[2025-12-01T16:51:21.476Z] > registry: docker.io
[2025-12-01T16:51:21.476Z] > path: library/ubuntu
[2025-12-01T16:51:21.476Z] >
[2025-12-01T16:51:21.476Z] > version: latest
[2025-12-01T16:51:21.476Z] > tag?: latest
[2025-12-01T16:51:21.476Z] > digest?: undefined
{"outcome":"success","imageName":"vsc-compose-image-without-features-minimal-e68a6a26fd0b554fc23c377797248fedf425fec9b62e96c01c795368e839fe09"}
[2025-12-01T16:51:21.476Z] manifest url: https://registry-1.docker.io/v2/library/ubuntu/manifests/latest
[2025-12-01T16:51:21.730Z] [httpOci] Attempting to authenticate via 'Bearer' auth.
[2025-12-01T16:51:21.731Z] [httpOci] No authentication credentials found for registry 'docker.io' via docker config or credential helper.
[2025-12-01T16:51:21.731Z] [httpOci] No authentication credentials found for registry 'docker.io'. Accessing anonymously.
[2025-12-01T16:51:21.731Z] [httpOci] Attempting to fetch bearer token from:  https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull
[2025-12-01T16:51:22.212Z] [httpOci] 200 on reattempt after auth: https://registry-1.docker.io/v2/library/ubuntu/manifests/latest
[2025-12-01T16:51:22.213Z] [httpOci] Applying cachedAuthHeader for registry docker.io...
[2025-12-01T16:51:22.471Z] [httpOci] 200 (Cached): https://registry-1.docker.io/v2/library/ubuntu/manifests/latest
[2025-12-01T16:51:22.471Z] Fetched: {
    "manifests": [
        {
            "annotations": {
                "com.docker.official-images.bashbrew.arch": "amd64",
                "org.opencontainers.image.base.name": "scratch",
                "org.opencontainers.image.created": "2025-10-13T00:00:00Z",
                "org.opencontainers.image.revision": "6177ca63f5beee0b6d2993721a62850b9146e474",
                "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base",
                "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu",
                "org.opencontainers.image.version": "24.04"
            },
            "digest": "sha256:4fdf0125919d24aec972544669dcd7d6a26a8ad7e6561c73d5549bd6db258ac2",
            "mediaType": "application/vnd.oci.image.manifest.v1+json",
            "platform": {
                "architecture": "amd64",
                "os": "linux"
            },
            "size": 424
        },
        {
            "annotations": {
                "com.docker.official-images.bashbrew.arch": "amd64",
                "vnd.docker.reference.digest": "sha256:4fdf0125919d24aec972544669dcd7d6a26a8ad7e6561c73d5549bd6db258ac2",
                "vnd.docker.reference.type": "attestation-manifest"
            },
            "digest": "sha256:6e7b17d6343f82de4aacb5687ded76f57aedf457e2906011093d98dfa4d11db4",
            "mediaType": "application/vnd.oci.image.manifest.v1+json",
            "platform": {
                "architecture": "unknown",
                "os": "unknown"
            },
            "size": 562
        },
        {

#3 [internal] load build definition from Dockerfile-with-features
#3 transferring dockerfile: 427B done
#3 DONE 0.0s
[2025-12-01T16:51:24.486Z] 
#4 [internal] load metadata for docker.io/library/ubuntu:latest
[2025-12-01T16:51:24.695Z] #4 ...

#5 [auth] library/ubuntu:pull token for registry-1.docker.io
#5 DONE 0.0s
[2025-12-01T16:51:24.845Z] 
#4 [internal] load metadata for docker.io/library/ubuntu:latest
[2025-12-01T16:51:25.245Z] #4 DONE 0.9s
[2025-12-01T16:51:25.421Z] 
#6 [internal] load .dockerignore
#6 transferring context: 2B done
#6 DONE 0.0s
[2025-12-01T16:51:25.421Z] 
#7 exporting to docker image format
#7 exporting layers done
#7 preparing layers for inline cache done
#7 exporting manifest sha256:4f991881b959e45ccb2487e55e6f5ef6931f610f24ec2f6273fd0742aad1bb97 done
#7 exporting config sha256:016a9038eb0b671d5914c850e29eaff7c01d43ed7434f83388591f89cdf42f0e done
[2025-12-01T16:51:25.686Z] #7 ...

#8 [dev_container_auto_added_stage_label 1/1] FROM docker.io/library/ubuntu:latest@sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54
#8 resolve docker.io/library/ubuntu:latest@sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54 done
#8 sha256:20043066d3d5c78b45520c5707319835ac7d1f3d7f0dded0138ea0897d6a3188 29.72MB / 29.72MB 0.3s done
#8 DONE 0.3s

#7 exporting to docker image format
#7 sending tarball
[2025-12-01T16:51:25.716Z] #7 sending tarball 0.1s done
#7 DONE 0.4s

#9 importing to docker
#9 DONE 0.0s

#10 resolving provenance for metadata file
#10 DONE 0.0s
[2025-12-01T16:51:25.716Z]  app  Built

[2025-12-01T16:51:25.720Z] Stop (2644 ms): Run: docker compose --project-name compose-image-without-features-minimal_devcontainer -f /home/runner/work/cli/cli/src/test/configs/compose-image-without-features-minimal/.devcontainer/docker-compose.yml -f /tmp/devcontainercli-runner/docker-compose/docker-compose.devcontainer.build-1764607883076.yml build app


{"outcome":"success","imageName":"vsc-compose-image-without-features-minimal-e68a6a26fd0b554fc23c377797248fedf425fec9b62e96c01c795368e839fe09"}

test-container-builder removed


      ✔ should execute successfully docker-compose without features with container builder (5240ms)

@Kaniska244
Copy link
Contributor Author

Simple Dev container configuration with features in devcontainer up command run:

The dev container configuration can be seen here

Expected Result: API call to check the availability of docker/dockerfile:1.4 image in DockerHub registry must be done and only if that succeeds then docker/dockerfile:1.4 image should be referenced further during execution.

Actual Result: API call done as it can be seen here based on the logger statement and later docker/dockerfile:1.4 image is downloaded

@Kaniska244
Copy link
Contributor Author

Simple Dev container configuration with features in devcontainer build command run:

The dev container configuration can be seen here

Expected Result: API call to check the availability of docker/dockerfile:1.4 image in DockerHub registry must be done and only if that succeeds then docker/dockerfile:1.4 image should be referenced further during execution.

Actual Result: API call done as it can be seen here based on the logger statement and later docker/dockerfile:1.4 image is downloaded

@Kaniska244
Copy link
Contributor Author

Docker compose configuration with features in devcontainer build command run:

The dev container configuration can be seen here

Expected Result: API call to check the availability of docker/dockerfile:1.4 image in DockerHub registry must be done and only if that succeeds then docker/dockerfile:1.4 image should be referenced further during execution.

Actual Result: API call done as it can be seen here based on the logger statement and later docker/dockerfile:1.4 image is downloaded

@Kaniska244
Copy link
Contributor Author

Kaniska244 commented Dec 2, 2025

Dev container configuration with features in devcontainer up command run with multiple retries:

The dev container configuration can be seen here

Expected Result: API call to check the availability of docker/dockerfile:1.4 image in DockerHub registry must be done and fail multiple times and only if that succeeds then docker/dockerfile:1.4 image should be referenced further during execution. To trigger failure to force multiple retries, I had paused for more that 5 min it while debugging in codespace so that the JWT auth token is expired. I couldn’t possibly think of simulating this in the GitHub actions test.

Actual Result: API call done with multiple retries as it can be seen in the log capture below from codespcaes terminal
Screenshot 2025-12-02 at 12 19 47 PM

Complete log below for reference:

@Kaniska244 ➜ /workspaces/cli (directive-dockerfile-perser-removal) $  /usr/bin/env 'NODE_OPTIONS= --require /vscode/bin/linux-x64/bf9252a2fb45be6893dd8870c0bf37e2e1766d61/extensions/ms-vscode.js-debug/src/bootloader.js  --inspect-publish-uid=http' 'VSCODE_INSPECTOR_OPTIONS=:::{"inspectorIpc":"/tmp/node-cdp.610-b54717d0-1.sock","deferredMode":false,"waitForDebugger":"","execPath":"/usr/local/bin/node","onlyEntrypoint":false,"autoAttachMode":"always","mandatePortTracking":true,"fileCallback":"/tmp/node-debug-callback-e3c8fee7267e02a9"}' /usr/local/bin/node ./dist/spec-node/devContainersSpecCLI.js up --workspace-folder /workspaces/cli/src/test/configs/example --log-level debug 
Debugger attached.
[2 ms] @devcontainers/cli 0.80.2. Node.js v18.20.8. linux 6.8.0-1030-azure x64.
[2 ms] Start: Run: docker buildx version
[75 ms] github.com/docker/buildx v0.30.1 9e66234aa13328a5e75b75aa5574e1ca6d6d9c01
[75 ms] 
[75 ms] Start: Run: docker -v
[138 ms] Start: Resolving Remote
[142 ms] Start: Run: git rev-parse --show-cdup
[147 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example --filter label=devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json
[162 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example
[394 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example --filter label=devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json
[409 ms] Start: Run: docker inspect --type image mcr.microsoft.com/devcontainers/base:latest
[940 ms] Resolving Feature dependencies for 'ghcr.io/devcontainers/features/go:1'...
[940 ms] * Processing feature: ghcr.io/devcontainers/features/go:1
[1662 ms] * Processing feature: ghcr.io/devcontainers/features/common-utils
[1917 ms] Soft-dependency 'ghcr.io/devcontainers/features/common-utils' is not required.  Removing from installation order...
[1925 ms] * Fetching feature: go_0_oci
[2584 ms] Files to omit: ''
[2594 ms] * Fetched feature: go_0_oci version 1.3.2
[435405 ms] Retrying (Attempt 0) with error 
                          'Error: Manifest fetch failed: status 401
    at W6 (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:485:2070)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async hx.maxRetries (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:485:2235)
    at async hx (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:473:1309)
    at async uw (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:485:2216)
    at async Q6 (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:404:425)
    at async sC (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:395:2548)
    at async Wu (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:395:282)
    at async Dw (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:467:1923)
    at async Cx (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:467:608)
'
[828445 ms] Retrying (Attempt 1) with error 
                          'Error: Manifest fetch failed: status 401
    at W6 (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:485:2070)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async hx.maxRetries (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:485:2235)
    at async hx (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:473:1309)
    at async uw (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:485:2216)
    at async Q6 (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:404:425)
    at async sC (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:395:2548)
    at async Wu (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:395:282)
    at async Dw (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:467:1923)
    at async Cx (/workspaces/cli/dist/spec-node/devContainersSpecCLI.js:467:608)
'
[839644 ms] Dockerfile frontend is accessible in DockerHub registry.
[839647 ms] Start: Run: docker buildx build --load --build-context dev_containers_feature_content_source=/tmp/devcontainercli-node/container-features/0.80.2-1764656776813 --build-arg _DEV_CONTAINERS_BASE_IMAGE=mcr.microsoft.com/devcontainers/base:latest --build-arg _DEV_CONTAINERS_IMAGE_USER=root --build-arg _DEV_CONTAINERS_FEATURE_CONTENT_SOURCE=dev_container_feature_content_temp --target dev_containers_target_stage -f /tmp/devcontainercli-node/container-features/0.80.2-1764656776813/Dockerfile.extended -t vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features /tmp/devcontainercli-node/empty-folder
[+] Building 100.0s (16/16) FINISHED                             docker:default
 => [internal] load build definition from Dockerfile.extended              0.0s
 => => transferring dockerfile: 2.50kB                                     0.0s
 => resolve image config for docker-image://docker.io/docker/dockerfile:1  2.6s
 => [auth] docker/dockerfile:pull token for registry-1.docker.io           0.0s
 => docker-image://docker.io/docker/dockerfile:1.4@sha256:9ba7531bd80fb0a  0.7s
 => => resolve docker.io/docker/dockerfile:1.4@sha256:9ba7531bd80fb0a8586  0.0s
 => => sha256:9ba7531bd80fb0a858632727cf7a112fbfd19b17e94 2.00kB / 2.00kB  0.0s
 => => sha256:ad87fb03593d1b71f9a1cfc1406c4aafcb253b1dabebf56 528B / 528B  0.0s
 => => sha256:1e8a16826fd1c80a63fa6817a9c7284c94e40cded14 2.37kB / 2.37kB  0.0s
 => => sha256:1328b32c40fca9bcf9d70d8eccb72eb873d1124d72d 9.94MB / 9.94MB  0.5s
 => => extracting sha256:1328b32c40fca9bcf9d70d8eccb72eb873d1124d72dadce0  0.1s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for mcr.microsoft.com/devcontainers/base:lat  0.5s
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
 => => transferring dev_containers_feature_content_source: 2B              0.0s
 => [context dev_containers_feature_content_source] load from client       0.0s
 => => transferring dev_containers_feature_content_source: 41.38kB         0.0s
 => [dev_containers_feature_content_normalize 1/3] FROM mcr.microsoft.co  25.2s
 => => resolve mcr.microsoft.com/devcontainers/base:latest@sha256:36751f1  0.0s
 => => sha256:905f59be5b27d4af25f523b61f943ff2ff12c120dc7 1.82kB / 1.82kB  0.0s
 => => sha256:36751f1ee2f30745a649afc2b2061f321bacdaa0617 1.61kB / 1.61kB  0.0s
 => => sha256:d8b18233c536054fcca93cd0f3b9d6ba9f3d85858 10.21kB / 10.21kB  0.0s
 => => sha256:53c88f1dfeb79b2f207f7f1a03a45e0dc5ed208b9 49.29MB / 49.29MB  1.0s
 => => sha256:eae668646f447b181fe300ae6756351b6167aa257 25.61MB / 25.61MB  1.0s
 => => sha256:a038f46d0cd91ce8520cc84e15a228185b0f5997711a99a 406B / 406B  0.1s
 => => sha256:de0631aa2289d47819245ba3fc2eef98970e70eff686751 134B / 134B  1.0s
 => => sha256:b600f9cc485798ab0ce29807d5b136a15b05dd18f8b6ffc 223B / 223B  1.1s
 => => extracting sha256:53c88f1dfeb79b2f207f7f1a03a45e0dc5ed208b9f496de1  1.3s
 => => sha256:31fdea145f8f1f9a67204ef3fba4478066aab19 111.17MB / 111.17MB  4.6s
 => => sha256:45c011778de6abc7a48e604fea9803d5f302fe122ff4faf 233B / 233B  1.1s
 => => sha256:749d08ecdd039c1ee31e94c577362fbabe3effe 189.18MB / 189.18MB  4.6s
 => => extracting sha256:eae668646f447b181fe300ae6756351b6167aa2578be449b  0.7s
 => => extracting sha256:a038f46d0cd91ce8520cc84e15a228185b0f5997711a99a9  0.0s
 => => extracting sha256:de0631aa2289d47819245ba3fc2eef98970e70eff6867518  0.0s
 => => extracting sha256:b600f9cc485798ab0ce29807d5b136a15b05dd18f8b6ffc1  0.0s
 => => extracting sha256:45c011778de6abc7a48e604fea9803d5f302fe122ff4faff  0.0s
 => => extracting sha256:31fdea145f8f1f9a67204ef3fba4478066aab19dc076d27f  4.6s
 => => extracting sha256:749d08ecdd039c1ee31e94c577362fbabe3effe1ecf0fc18  3.5s
 => [dev_containers_feature_content_normalize 2/3] COPY --from=dev_contai  0.0s
 => [dev_containers_target_stage 2/5] RUN mkdir -p /tmp/dev-container-fea  0.3s
 => [dev_containers_feature_content_normalize 3/3] RUN chmod -R 0755 /tmp  0.3s
 => [dev_containers_target_stage 3/5] COPY --from=dev_containers_feature_  0.2s
 => [dev_containers_target_stage 4/5] RUN echo "_CONTAINER_USER_HOME=$( (  0.2s
 => [dev_containers_target_stage 5/5] RUN --mount=type=bind,from=dev_con  66.5s
 => exporting to image                                                     3.4s
 => => exporting layers                                                    3.4s
 => => writing image sha256:c64bb913dc954d7bc90d36b8ebdfc5c3d4100b0bae633  0.0s
 => => naming to docker.io/library/vsc-example-1c9b39a06f4f7869a07240de11  0.0s
[939814 ms] Start: Run: docker build -f /tmp/devcontainercli-node/updateUID.Dockerfile-0.80.2 -t vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features-uid --platform linux/amd64 --build-arg BASE_IMAGE=vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features --build-arg REMOTE_USER=vscode --build-arg NEW_UID=1000 --build-arg NEW_GID=1000 --build-arg IMAGE_USER=root /tmp/devcontainercli-node/empty-folder
[+] Building 3.6s (6/6) FINISHED                                 docker:default
 => [internal] load build definition from updateUID.Dockerfile-0.80.2      0.0s
 => => transferring dockerfile: 1.52kB                                     0.0s
 => WARN: InvalidDefaultArgInFrom: Default value for ARG $BASE_IMAGE resu  0.0s
 => [internal] load metadata for docker.io/library/vsc-example-1c9b39a06f  0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [1/2] FROM docker.io/library/vsc-example-1c9b39a06f4f7869a07240de11d5  0.0s
 => [2/2] RUN eval $(sed -n "s/vscode:[^:]*:\([^:]*\):\([^:]*\):[^:]*:\([  0.1s
 => exporting to image                                                     3.4s
 => => exporting layers                                                    3.3s
 => => writing image sha256:71f311481c1f7b4d630d4db36f9f01e486bb12a2bedf4  0.0s
 => => naming to docker.io/library/vsc-example-1c9b39a06f4f7869a07240de11  0.0s

 1 warning found (use docker --debug to expand):
 - InvalidDefaultArgInFrom: Default value for ARG $BASE_IMAGE results in empty or invalid base image name (line 4)
[943504 ms] Start: Run: docker events --format {{json .}} --filter event=start
[943507 ms] Start: Starting container
[943507 ms] Start: Run: docker run --sig-proxy=false -a STDOUT -a STDERR --mount type=bind,source=/workspaces/cli,target=/workspaces/cli -l devcontainer.local_folder=/workspaces/cli/src/test/configs/example -l devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json --init --cap-add SYS_PTRACE --security-opt seccomp=unconfined --entrypoint /bin/sh vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features-uid -c echo Container started
Container started
[945084 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example --filter label=devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json
[945099 ms] Start: Run: docker inspect --type container 2d6ac0d32465
[945114 ms] Start: Inspecting container
[945115 ms] Start: Run: docker inspect --type container 2d6ac0d3246567f8ba908be824b6b4f6b0fda543f6278f384afb16e57ac5e4bf
[945130 ms] Start: Run in container: /bin/sh
[945133 ms] Start: Run in container: uname -m
[945197 ms] x86_64
[945197 ms] 
[945197 ms] Start: Run in container: (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null
[945198 ms] PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.2
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
[945199 ms] 
[945199 ms] Start: Run in container:  (command -v getent >/dev/null 2>&1 && getent passwd 'vscode' || grep -E '^vscode|^[^:]*:[^:]*:vscode:' /etc/passwd || true)
[945201 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcEnvironmentMarker'
[945202 ms] 
[945202 ms] 
[945202 ms] Exit code 1
[945202 ms] Start: Run in container: /bin/sh
[945205 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcEnvironmentMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcEnvironmentMarker' ; } 2> /dev/null
[945245 ms] 
[945245 ms] 
[945245 ms] Start: Run in container: cat >> /etc/environment <<'etcEnvironmentEOF'
[945249 ms] 
[945249 ms] 
[945249 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcProfileMarker'
[945249 ms] 
[945250 ms] 
[945250 ms] Exit code 1
[945250 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcProfileMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcProfileMarker' ; } 2> /dev/null
[945251 ms] 
[945251 ms] 
[945251 ms] Start: Run in container: sed -i -E 's/((^|\s)PATH=)([^\$]*)$/\1${PATH:-\3}/g' /etc/profile || true
[945253 ms] 
[945253 ms] 
[945254 ms] userEnvProbe: loginInteractiveShell (default)
[945254 ms] userEnvProbe: not found in cache
[945254 ms] userEnvProbe shell: /bin/bash
[945255 ms] Start: Run in container: /bin/bash -lic echo -n 699a09ce-ff64-4953-b402-c69a51335695; cat /proc/self/environ; echo -n 699a09ce-ff64-4953-b402-c69a51335695
[945255 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.onCreateCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T06:41:59.396053307Z}" != '2025-12-02T06:41:59.396053307Z' ] && echo '2025-12-02T06:41:59.396053307Z' > '/home/vscode/.devcontainer/.onCreateCommandMarker'
[945260 ms] 
[945261 ms] 
[945261 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.updateContentCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T06:41:59.396053307Z}" != '2025-12-02T06:41:59.396053307Z' ] && echo '2025-12-02T06:41:59.396053307Z' > '/home/vscode/.devcontainer/.updateContentCommandMarker'
[945263 ms] 
[945264 ms] 
[945264 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.postCreateCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T06:41:59.396053307Z}" != '2025-12-02T06:41:59.396053307Z' ] && echo '2025-12-02T06:41:59.396053307Z' > '/home/vscode/.devcontainer/.postCreateCommandMarker'
[945266 ms] 
[945266 ms] 
[945267 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.postStartCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T06:41:59.428573307Z}" != '2025-12-02T06:41:59.428573307Z' ] && echo '2025-12-02T06:41:59.428573307Z' > '/home/vscode/.devcontainer/.postStartCommandMarker'
[945269 ms] 
[945269 ms] 
{"outcome":"success","containerId":"2d6ac0d3246567f8ba908be824b6b4f6b0fda543f6278f384afb16e57ac5e4bf","remoteUser":"vscode","remoteWorkspaceFolder":"/workspaces/cli/src/test/configs/example"}
Waiting for the debugger to disconnect...
@Kaniska244 ➜ /workspaces/cli (directive-dockerfile-perser-removal) $ 

@Kaniska244
Copy link
Contributor Author

Dev container configuration with features in devcontainer up command run with incorrect DockerHub registry url:

The dev container configuration can be seen here

Expected Result: API call to check the availability of docker/dockerfile:1.4 image in DockerHub registry must be done and fail in all five retry attempts and then docker/dockerfile:1.4 image shouldn’t be referenced further during execution. I injected this locally in codespace by using wrong url in code. I couldn’t possibly think of simulating this in the GitHub actions test in the PR as that would have required code change.

Actual Result: API call done with multiple retries as it can be seen in the log capture below from codespcaes terminal
Screenshot 2025-12-02 at 12 30 39 PM

Complete log below for reference:

@Kaniska244 ➜ /workspaces/cli (directive-dockerfile-perser-removal) $  cd /workspaces/cli ; /usr/bin/env 'NODE_OPTIONS= --require /vscode/bin/linux-x64/bf9252a2fb45be6893dd8870c0bf37e2e1766d61/extensions/ms-vscode.js-debug/src/bootloader.js  --inspect-publish-uid=http' 'VSCODE_INSPECTOR_OPTIONS=:::{"inspectorIpc":"/tmp/node-cdp.610-056130b7-7.sock","deferredMode":false,"waitForDebugger":"","execPath":"/usr/local/bin/node","onlyEntrypoint":false,"autoAttachMode":"always","mandatePortTracking":true,"fileCallback":"/tmp/node-debug-callback-cf623b30155ab781"}' /usr/local/bin/node ./dist/spec-node/devContainersSpecCLI.js up --workspace-folder /workspaces/cli/src/test/configs/example --log-level debug 
Debugger attached.
[2 ms] @devcontainers/cli 0.80.2. Node.js v18.20.8. linux 6.8.0-1030-azure x64.
[2 ms] Start: Run: docker buildx version
[57 ms] github.com/docker/buildx v0.30.1 9e66234aa13328a5e75b75aa5574e1ca6d6d9c01
[57 ms] 
[57 ms] Start: Run: docker -v
[70 ms] Start: Resolving Remote
[75 ms] Start: Run: git rev-parse --show-cdup
[79 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example --filter label=devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json
[93 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example
[111 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example --filter label=devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json
[126 ms] Start: Run: docker inspect --type image mcr.microsoft.com/devcontainers/base:latest
[541 ms] Resolving Feature dependencies for 'ghcr.io/devcontainers/features/go:1'...
[542 ms] * Processing feature: ghcr.io/devcontainers/features/go:1
[1249 ms] * Processing feature: ghcr.io/devcontainers/features/common-utils
[1500 ms] Soft-dependency 'ghcr.io/devcontainers/features/common-utils' is not required.  Removing from installation order...
[1508 ms] * Fetching feature: go_0_oci
[1914 ms] Files to omit: ''
[1925 ms] * Fetched feature: go_0_oci version 1.3.2
[2590 ms] Retrying (Attempt 0) with error 
                          'Error: getaddrinfo ENOTFOUND registry-10.docker.io
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26)
    at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:128:17)
'
[5257 ms] Retrying (Attempt 1) with error 
                          'Error: getaddrinfo ENOTFOUND registry-10.docker.io
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26)
    at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:128:17)
'
[7905 ms] Retrying (Attempt 2) with error 
                          'Error: getaddrinfo ENOTFOUND registry-10.docker.io
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26)
    at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:128:17)
'
[10748 ms] Retrying (Attempt 3) with error 
                          'Error: getaddrinfo ENOTFOUND registry-10.docker.io
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26)
    at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:128:17)
'
[13389 ms] Retrying (Attempt 4) with error 
                          'Error: getaddrinfo ENOTFOUND registry-10.docker.io
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26)
    at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:128:17)
'
[15391 ms] Dockerfile frontend check failed after retries: getaddrinfo ENOTFOUND registry-10.docker.io
[15394 ms] Start: Run: docker buildx build --load --build-context dev_containers_feature_content_source=/tmp/devcontainercli-node/container-features/0.80.2-1764658628955 --build-arg _DEV_CONTAINERS_BASE_IMAGE=mcr.microsoft.com/devcontainers/base:latest --build-arg _DEV_CONTAINERS_IMAGE_USER=root --build-arg _DEV_CONTAINERS_FEATURE_CONTENT_SOURCE=dev_container_feature_content_temp --target dev_containers_target_stage -f /tmp/devcontainercli-node/container-features/0.80.2-1764658628955/Dockerfile.extended -t vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features /tmp/devcontainercli-node/empty-folder
[+] Building 93.1s (14/14) FINISHED                              docker:default
 => [internal] load build definition from Dockerfile.extended              0.0s
 => => transferring dockerfile: 2.47kB                                     0.0s
 => [internal] load metadata for mcr.microsoft.com/devcontainers/base:lat  0.5s
 => [context dev_containers_feature_content_source] load .dockerignore     0.2s
 => => transferring dev_containers_feature_content_source: 2B              0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [context dev_containers_feature_content_source] load from client       0.0s
 => => transferring dev_containers_feature_content_source: 101B            0.0s
 => [dev_containers_feature_content_normalize 1/3] FROM mcr.microsoft.co  23.4s
 => => resolve mcr.microsoft.com/devcontainers/base:latest@sha256:36751f1  0.0s
 => => sha256:53c88f1dfeb79b2f207f7f1a03a45e0dc5ed208b 49.29MB / 49.29MB  92.5s
 => => sha256:36751f1ee2f30745a649afc2b2061f321bacdaa0617 1.61kB / 1.61kB  0.0s
 => => sha256:905f59be5b27d4af25f523b61f943ff2ff12c120dc7 1.82kB / 1.82kB  0.0s
 => => sha256:eae668646f447b181fe300ae6756351b6167aa25 25.61MB / 25.61MB  92.5s
 => => sha256:a038f46d0cd91ce8520cc84e15a228185b0f5997711a99a 406B / 406B  0.2s
 => => sha256:d8b18233c536054fcca93cd0f3b9d6ba9f3d85858 10.21kB / 10.21kB  0.0s
 => => sha256:de0631aa2289d47819245ba3fc2eef98970e70eff68675 134B / 134B  92.5s
 => => extracting sha256:53c88f1dfeb79b2f207f7f1a03a45e0dc5ed208b9f496de1  1.3s
 => => sha256:45c011778de6abc7a48e604fea9803d5f302fe122ff4faf 233B / 233B  1.0s
 => => sha256:31fdea145f8f1f9a67204ef3fba4478066aab19 111.17MB / 111.17MB  4.4s
 => => sha256:b600f9cc485798ab0ce29807d5b136a15b05dd18f8b6ffc 223B / 223B  1.0s
 => => sha256:749d08ecdd039c1ee31e94c577362fbabe3effe 189.18MB / 189.18MB  4.5s
 => => extracting sha256:eae668646f447b181fe300ae6756351b6167aa2578be449b  0.8s
 => => extracting sha256:a038f46d0cd91ce8520cc84e15a228185b0f5997711a99a9  0.0s
 => => extracting sha256:de0631aa2289d47819245ba3fc2eef98970e70eff6867518  0.0s
 => => extracting sha256:b600f9cc485798ab0ce29807d5b136a15b05dd18f8b6ffc1  0.0s
 => => extracting sha256:45c011778de6abc7a48e604fea9803d5f302fe122ff4faff  0.0s
 => => extracting sha256:31fdea145f8f1f9a67204ef3fba4478066aab19dc076d27f  4.1s
 => => extracting sha256:749d08ecdd039c1ee31e94c577362fbabe3effe1ecf0fc18  3.5s
 => [context dev_containers_feature_content_source] load from client       0.0s
 => => transferring dev_containers_feature_content_source: 17.65kB         0.0s
 => [dev_containers_feature_content_normalize 2/3] COPY --from=dev_contai  0.0s
 => [dev_containers_target_stage 2/5] RUN mkdir -p /tmp/dev-container-fea  0.2s
 => [dev_containers_feature_content_normalize 3/3] RUN chmod -R 0755 /tmp  0.2s
 => [dev_containers_target_stage 3/5] COPY --from=dev_containers_feature_  0.0s
 => [dev_containers_target_stage 4/5] RUN echo "_CONTAINER_USER_HOME=$( (  0.2s
 => [dev_containers_target_stage 5/5] RUN --mount=type=bind,from=dev_con  65.3s
 => exporting to image                                                     3.4s
 => => exporting layers                                                    3.4s
 => => writing image sha256:ad02abb9b0fdcbee1ea1f3fd2f94f595699d54d8dcab4  0.0s
 => => naming to docker.io/library/vsc-example-1c9b39a06f4f7869a07240de11  0.0s
[108582 ms] Start: Run: docker build -f /tmp/devcontainercli-node/updateUID.Dockerfile-0.80.2 -t vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features-uid --platform linux/amd64 --build-arg BASE_IMAGE=vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features --build-arg REMOTE_USER=vscode --build-arg NEW_UID=1000 --build-arg NEW_GID=1000 --build-arg IMAGE_USER=root /tmp/devcontainercli-node/empty-folder
[+] Building 1.9s (6/6) FINISHED                                 docker:default
 => [internal] load build definition from updateUID.Dockerfile-0.80.2      0.0s
 => => transferring dockerfile: 1.52kB                                     0.0s
 => WARN: InvalidDefaultArgInFrom: Default value for ARG $BASE_IMAGE resu  0.0s
 => [internal] load metadata for docker.io/library/vsc-example-1c9b39a06f  0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [1/2] FROM docker.io/library/vsc-example-1c9b39a06f4f7869a07240de11d5  0.0s
 => [2/2] RUN eval $(sed -n "s/vscode:[^:]*:\([^:]*\):\([^:]*\):[^:]*:\([  0.1s
 => exporting to image                                                     1.7s
 => => exporting layers                                                    1.7s
 => => writing image sha256:a0d56e7831e57ae249e5cebe5edf41619c64b54c943ad  0.0s
 => => naming to docker.io/library/vsc-example-1c9b39a06f4f7869a07240de11  0.0s

 1 warning found (use docker --debug to expand):
 - InvalidDefaultArgInFrom: Default value for ARG $BASE_IMAGE results in empty or invalid base image name (line 4)
[110593 ms] Start: Run: docker events --format {{json .}} --filter event=start
[110596 ms] Start: Starting container
[110596 ms] Start: Run: docker run --sig-proxy=false -a STDOUT -a STDERR --mount type=bind,source=/workspaces/cli,target=/workspaces/cli -l devcontainer.local_folder=/workspaces/cli/src/test/configs/example -l devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json --init --cap-add SYS_PTRACE --security-opt seccomp=unconfined --entrypoint /bin/sh vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features-uid -c echo Container started
Container started
[110757 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example --filter label=devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json
[110774 ms] Start: Run: docker inspect --type container b7ba047a6cd1
[110790 ms] Start: Inspecting container
[110790 ms] Start: Run: docker inspect --type container b7ba047a6cd1c545fd11372032aa58120a021d7ab71874eff2258ab26cf64df0
[110805 ms] Start: Run in container: /bin/sh
[110808 ms] Start: Run in container: uname -m
[110851 ms] x86_64
[110851 ms] 
[110851 ms] Start: Run in container: (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null
[110852 ms] PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.2
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
[110852 ms] 
[110853 ms] Start: Run in container:  (command -v getent >/dev/null 2>&1 && getent passwd 'vscode' || grep -E '^vscode|^[^:]*:[^:]*:vscode:' /etc/passwd || true)
[110855 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcEnvironmentMarker'
[110856 ms] 
[110856 ms] 
[110856 ms] Exit code 1
[110856 ms] Start: Run in container: /bin/sh
[110859 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcEnvironmentMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcEnvironmentMarker' ; } 2> /dev/null
[110932 ms] 
[110932 ms] 
[110932 ms] Start: Run in container: cat >> /etc/environment <<'etcEnvironmentEOF'
[110936 ms] 
[110936 ms] 
[110936 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcProfileMarker'
[110937 ms] 
[110937 ms] 
[110937 ms] Exit code 1
[110937 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcProfileMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcProfileMarker' ; } 2> /dev/null
[110939 ms] 
[110939 ms] 
[110939 ms] Start: Run in container: sed -i -E 's/((^|\s)PATH=)([^\$]*)$/\1${PATH:-\3}/g' /etc/profile || true
[110941 ms] 
[110941 ms] 
[110941 ms] userEnvProbe: loginInteractiveShell (default)
[110942 ms] userEnvProbe: not found in cache
[110942 ms] userEnvProbe shell: /bin/bash
[110942 ms] Start: Run in container: /bin/bash -lic echo -n ad8b86f0-2d88-4744-acef-45cad4d66316; cat /proc/self/environ; echo -n ad8b86f0-2d88-4744-acef-45cad4d66316
[110943 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.onCreateCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T06:58:59.025759103Z}" != '2025-12-02T06:58:59.025759103Z' ] && echo '2025-12-02T06:58:59.025759103Z' > '/home/vscode/.devcontainer/.onCreateCommandMarker'
[110948 ms] 
[110948 ms] 
[110948 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.updateContentCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T06:58:59.025759103Z}" != '2025-12-02T06:58:59.025759103Z' ] && echo '2025-12-02T06:58:59.025759103Z' > '/home/vscode/.devcontainer/.updateContentCommandMarker'
[110951 ms] 
[110951 ms] 
[110951 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.postCreateCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T06:58:59.025759103Z}" != '2025-12-02T06:58:59.025759103Z' ] && echo '2025-12-02T06:58:59.025759103Z' > '/home/vscode/.devcontainer/.postCreateCommandMarker'
[110954 ms] 
[110954 ms] 
[110955 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.postStartCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T06:58:59.072042364Z}" != '2025-12-02T06:58:59.072042364Z' ] && echo '2025-12-02T06:58:59.072042364Z' > '/home/vscode/.devcontainer/.postStartCommandMarker'
[110958 ms] 
[110958 ms] 
{"outcome":"success","containerId":"b7ba047a6cd1c545fd11372032aa58120a021d7ab71874eff2258ab26cf64df0","remoteUser":"vscode","remoteWorkspaceFolder":"/workspaces/cli/src/test/configs/example"}
Waiting for the debugger to disconnect...
@Kaniska244 ➜ /workspaces/cli (directive-dockerfile-perser-removal) $ 

@Kaniska244
Copy link
Contributor Author

Dev container configuration with features in devcontainer up command run with --omit-syntax-directive flag as true:

The dev container configuration can be seen here

Expected Result: API call to check the availability of docker/dockerfile:1.4 image in DockerHub registry must not be done and docker/dockerfile:1.4 image shouldn’t be referenced further during execution. I injected this locally in codespace.

Actual Result: API call not done and docker/dockerfile:1.4 image isn't downloaded as per the below log capture.
Screenshot 2025-12-02 at 2 03 30 PM

Complete log for reference:

@Kaniska244 ➜ /workspaces/cli (directive-dockerfile-perser-removal) $  /usr/bin/env 'NODE_OPTIONS= --require /vscode/bin/linux-x64/bf9252a2fb45be6893dd8870c0bf37e2e1766d61/extensions/ms-vscode.js-debug/src/bootloader.js  --inspect-publish-uid=http' 'VSCODE_INSPECTOR_OPTIONS=:::{"inspectorIpc":"/tmp/node-cdp.622-9250bf5c-1.sock","deferredMode":false,"waitForDebugger":"","execPath":"/usr/local/bin/node","onlyEntrypoint":false,"autoAttachMode":"always","mandatePortTracking":true,"fileCallback":"/tmp/node-debug-callback-472589aa26104f0b"}' /usr/local/bin/node ./dist/spec-node/devContainersSpecCLI.js up --workspace-folder /workspaces/cli/src/test/configs/example --log-level debug --omit-syntax-directive true 
Debugger attached.
[1 ms] @devcontainers/cli 0.80.2. Node.js v18.20.8. linux 6.8.0-1030-azure x64.
[1 ms] Start: Run: docker buildx version
[60 ms] github.com/docker/buildx v0.30.1 9e66234aa13328a5e75b75aa5574e1ca6d6d9c01
[60 ms] 
[60 ms] Start: Run: docker -v
[74 ms] Start: Resolving Remote
[79 ms] Start: Run: git rev-parse --show-cdup
[83 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example --filter label=devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json
[101 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example
[398 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example --filter label=devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json
[415 ms] Start: Run: docker inspect --type image mcr.microsoft.com/devcontainers/base:latest
[889 ms] Resolving Feature dependencies for 'ghcr.io/devcontainers/features/go:1'...
[890 ms] * Processing feature: ghcr.io/devcontainers/features/go:1
[1631 ms] * Processing feature: ghcr.io/devcontainers/features/common-utils
[1871 ms] Soft-dependency 'ghcr.io/devcontainers/features/common-utils' is not required.  Removing from installation order...
[1879 ms] * Fetching feature: go_0_oci
[2516 ms] Files to omit: ''
[2525 ms] * Fetched feature: go_0_oci version 1.3.2
[2531 ms] Start: Run: docker buildx build --load --build-context dev_containers_feature_content_source=/tmp/devcontainercli-node/container-features/0.80.2-1764663957570 --build-arg _DEV_CONTAINERS_BASE_IMAGE=mcr.microsoft.com/devcontainers/base:latest --build-arg _DEV_CONTAINERS_IMAGE_USER=root --build-arg _DEV_CONTAINERS_FEATURE_CONTENT_SOURCE=dev_container_feature_content_temp --target dev_containers_target_stage -f /tmp/devcontainercli-node/container-features/0.80.2-1764663957570/Dockerfile.extended -t vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features /tmp/devcontainercli-node/empty-folder
[+] Building 1.8s (6/13)                                         docker:default
 => => transferring dockerfile: 2.47kB                                     0.0s
[+] Building 1.9s (6/13)                                         docker:default
 => [internal] load metadata for mcr.microsoft.com/devcontainers/base:lat  0.6s
[+] Building 2.0s (6/13)                                         docker:default
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
[+] Building 2.1s (6/13)                                         docker:default
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
[+] Building 2.3s (6/13)                                         docker:default
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
[+] Building 2.4s (6/13)                                         docker:default
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
[+] Building 2.5s (6/13)                                         docker:default
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
[+] Building 2.6s (6/13)                                         docker:default
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
[+] Building 2.7s (6/13)                                         docker:default
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
[+] Building 2.8s (6/13)                                         docker:default
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
[+] Building 3.0s (6/13)                                         docker:default
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
[+] Building 3.1s (6/13)                                         docker:default
[+] Building 84.1s (14/14) FINISHED                              docker:default
 => [internal] load build definition from Dockerfile.extended              0.0s
 => => transferring dockerfile: 2.47kB                                     0.0s
 => [internal] load metadata for mcr.microsoft.com/devcontainers/base:lat  0.6s
 => [context dev_containers_feature_content_source] load .dockerignore     0.0s
 => => transferring dev_containers_feature_content_source: 2B              0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [context dev_containers_feature_content_source] load from client       0.0s
 => => transferring dev_containers_feature_content_source: 101B            0.0s
 => [dev_containers_feature_content_normalize 1/3] FROM mcr.microsoft.co  24.1s
 => => resolve mcr.microsoft.com/devcontainers/base:latest@sha256:36751f1  0.0s
 => => sha256:905f59be5b27d4af25f523b61f943ff2ff12c120dc7 1.82kB / 1.82kB  0.0s
 => => sha256:d8b18233c536054fcca93cd0f3b9d6ba9f3d85858 10.21kB / 10.21kB  0.0s
 => => sha256:53c88f1dfeb79b2f207f7f1a03a45e0dc5ed208b9 49.29MB / 49.29MB  1.0s
 => => sha256:eae668646f447b181fe300ae6756351b6167aa257 25.61MB / 25.61MB  1.0s
 => => sha256:a038f46d0cd91ce8520cc84e15a228185b0f5997711a99a 406B / 406B  0.2s
 => => sha256:36751f1ee2f30745a649afc2b2061f321bacdaa0617 1.61kB / 1.61kB  0.0s
 => => sha256:de0631aa2289d47819245ba3fc2eef98970e70eff686751 134B / 134B  1.0s
 => => sha256:b600f9cc485798ab0ce29807d5b136a15b05dd18f8b6ffc 223B / 223B  1.3s
 => => sha256:31fdea145f8f1f9a67204ef3fba4478066aab19 111.17MB / 111.17MB  4.8s
 => => extracting sha256:53c88f1dfeb79b2f207f7f1a03a45e0dc5ed208b9f496de1  1.3s
 => => sha256:45c011778de6abc7a48e604fea9803d5f302fe122ff4faf 233B / 233B  1.4s
 => => sha256:749d08ecdd039c1ee31e94c577362fbabe3effe 189.18MB / 189.18MB  4.8s
 => => extracting sha256:eae668646f447b181fe300ae6756351b6167aa2578be449b  0.7s
 => => extracting sha256:a038f46d0cd91ce8520cc84e15a228185b0f5997711a99a9  0.0s
 => => extracting sha256:de0631aa2289d47819245ba3fc2eef98970e70eff6867518  0.0s
 => => extracting sha256:b600f9cc485798ab0ce29807d5b136a15b05dd18f8b6ffc1  0.0s
 => => extracting sha256:45c011778de6abc7a48e604fea9803d5f302fe122ff4faff  0.0s
 => => extracting sha256:31fdea145f8f1f9a67204ef3fba4478066aab19dc076d27f  4.0s
 => => extracting sha256:749d08ecdd039c1ee31e94c577362fbabe3effe1ecf0fc18  3.4s
 => [context dev_containers_feature_content_source] load from client       0.0s
 => => transferring dev_containers_feature_content_source: 17.65kB         0.0s
 => [dev_containers_feature_content_normalize 2/3] COPY --from=dev_contai  0.1s
 => [dev_containers_target_stage 2/5] RUN mkdir -p /tmp/dev-container-fea  0.2s
 => [dev_containers_feature_content_normalize 3/3] RUN chmod -R 0755 /tmp  0.2s
 => [dev_containers_target_stage 3/5] COPY --from=dev_containers_feature_  0.0s
 => [dev_containers_target_stage 4/5] RUN echo "_CONTAINER_USER_HOME=$( (  0.2s
 => [dev_containers_target_stage 5/5] RUN --mount=type=bind,from=dev_con  55.6s
 => exporting to image                                                     3.3s
 => => exporting layers                                                    3.3s
 => => writing image sha256:f2ac98ad51bbb9ccf460af4ce13b1b0c4c0f69058be02  0.0s
 => => naming to docker.io/library/vsc-example-1c9b39a06f4f7869a07240de11  0.0s
[86813 ms] Start: Run: docker build -f /tmp/devcontainercli-node/updateUID.Dockerfile-0.80.2 -t vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features-uid --platform linux/amd64 --build-arg BASE_IMAGE=vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features --build-arg REMOTE_USER=vscode --build-arg NEW_UID=1000 --build-arg NEW_GID=1000 --build-arg IMAGE_USER=root /tmp/devcontainercli-node/empty-folder
[+] Building 1.9s (6/6) FINISHED                                 docker:default
 => [internal] load build definition from updateUID.Dockerfile-0.80.2      0.0s
 => => transferring dockerfile: 1.52kB                                     0.0s
 => WARN: InvalidDefaultArgInFrom: Default value for ARG $BASE_IMAGE resu  0.0s
 => [internal] load metadata for docker.io/library/vsc-example-1c9b39a06f  0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [1/2] FROM docker.io/library/vsc-example-1c9b39a06f4f7869a07240de11d5  0.0s
 => [2/2] RUN eval $(sed -n "s/vscode:[^:]*:\([^:]*\):\([^:]*\):[^:]*:\([  0.1s
 => exporting to image                                                     1.7s
 => => exporting layers                                                    1.7s
 => => writing image sha256:c0183a7e947c9cd67b0529bc5422e1005797ed7af193b  0.0s
 => => naming to docker.io/library/vsc-example-1c9b39a06f4f7869a07240de11  0.0s

 1 warning found (use docker --debug to expand):
 - InvalidDefaultArgInFrom: Default value for ARG $BASE_IMAGE results in empty or invalid base image name (line 4)
[88843 ms] Start: Run: docker events --format {{json .}} --filter event=start
[88846 ms] Start: Starting container
[88846 ms] Start: Run: docker run --sig-proxy=false -a STDOUT -a STDERR --mount type=bind,source=/workspaces/cli,target=/workspaces/cli -l devcontainer.local_folder=/workspaces/cli/src/test/configs/example -l devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json --init --cap-add SYS_PTRACE --security-opt seccomp=unconfined --entrypoint /bin/sh vsc-example-1c9b39a06f4f7869a07240de11d5c8666747d29b8f272789455ffed5fd3104a1-features-uid -c echo Container started
Container started
[89037 ms] Start: Run: docker ps -q -a --filter label=devcontainer.local_folder=/workspaces/cli/src/test/configs/example --filter label=devcontainer.config_file=/workspaces/cli/src/test/configs/example/.devcontainer.json
[89052 ms] Start: Run: docker inspect --type container cfa82659d341
[89066 ms] Start: Inspecting container
[89066 ms] Start: Run: docker inspect --type container cfa82659d34176271bdc3b9f30873594512014c48a81bf6bbdbb11e4a71552e4
[89081 ms] Start: Run in container: /bin/sh
[89083 ms] Start: Run in container: uname -m
[89114 ms] x86_64
[89114 ms] 
[89114 ms] Start: Run in container: (cat /etc/os-release || cat /usr/lib/os-release) 2>/dev/null
[89115 ms] PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.2
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
[89115 ms] 
[89116 ms] Start: Run in container:  (command -v getent >/dev/null 2>&1 && getent passwd 'vscode' || grep -E '^vscode|^[^:]*:[^:]*:vscode:' /etc/passwd || true)
[89118 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcEnvironmentMarker'
[89119 ms] 
[89119 ms] 
[89119 ms] Exit code 1
[89119 ms] Start: Run in container: /bin/sh
[89121 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcEnvironmentMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcEnvironmentMarker' ; } 2> /dev/null
[89157 ms] 
[89157 ms] 
[89157 ms] Start: Run in container: cat >> /etc/environment <<'etcEnvironmentEOF'
[89161 ms] 
[89161 ms] 
[89161 ms] Start: Run in container: test -f '/var/devcontainer/.patchEtcProfileMarker'
[89162 ms] 
[89162 ms] 
[89162 ms] Exit code 1
[89162 ms] Start: Run in container: test ! -f '/var/devcontainer/.patchEtcProfileMarker' && set -o noclobber && mkdir -p '/var/devcontainer' && { > '/var/devcontainer/.patchEtcProfileMarker' ; } 2> /dev/null
[89164 ms] 
[89164 ms] 
[89164 ms] Start: Run in container: sed -i -E 's/((^|\s)PATH=)([^\$]*)$/\1${PATH:-\3}/g' /etc/profile || true
[89166 ms] 
[89166 ms] 
[89166 ms] userEnvProbe: loginInteractiveShell (default)
[89167 ms] userEnvProbe: not found in cache
[89167 ms] userEnvProbe shell: /bin/bash
[89167 ms] Start: Run in container: /bin/bash -lic echo -n 84276da0-8641-40a3-8b97-441babea6338; cat /proc/self/environ; echo -n 84276da0-8641-40a3-8b97-441babea6338
[89168 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.onCreateCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T08:27:25.543965968Z}" != '2025-12-02T08:27:25.543965968Z' ] && echo '2025-12-02T08:27:25.543965968Z' > '/home/vscode/.devcontainer/.onCreateCommandMarker'
[89173 ms] 
[89173 ms] 
[89173 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.updateContentCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T08:27:25.543965968Z}" != '2025-12-02T08:27:25.543965968Z' ] && echo '2025-12-02T08:27:25.543965968Z' > '/home/vscode/.devcontainer/.updateContentCommandMarker'
[89176 ms] 
[89176 ms] 
[89176 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.postCreateCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T08:27:25.543965968Z}" != '2025-12-02T08:27:25.543965968Z' ] && echo '2025-12-02T08:27:25.543965968Z' > '/home/vscode/.devcontainer/.postCreateCommandMarker'
[89179 ms] 
[89179 ms] 
[89179 ms] Start: Run in container: mkdir -p '/home/vscode/.devcontainer' && CONTENT="$(cat '/home/vscode/.devcontainer/.postStartCommandMarker' 2>/dev/null || echo ENOENT)" && [ "${CONTENT:-2025-12-02T08:27:25.612039218Z}" != '2025-12-02T08:27:25.612039218Z' ] && echo '2025-12-02T08:27:25.612039218Z' > '/home/vscode/.devcontainer/.postStartCommandMarker'
[89181 ms] 
[89182 ms] 
{"outcome":"success","containerId":"cfa82659d34176271bdc3b9f30873594512014c48a81bf6bbdbb11e4a71552e4","remoteUser":"vscode","remoteWorkspaceFolder":"/workspaces/cli/src/test/configs/example"}
Waiting for the debugger to disconnect...
@Kaniska244 ➜ /workspaces/cli (directive-dockerfile-perser-removal) $ 

@sam-byng
Copy link
Contributor

sam-byng commented Dec 2, 2025

Great testing - LGTM!

@sam-byng sam-byng merged commit 4ae9f7c into devcontainers:main Dec 2, 2025
21 checks passed
@sam-byng sam-byng mentioned this pull request Dec 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants