Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Dec 23, 2025

  • Add alpine-extra images for runtime and aspnet repos
    • Create Dockerfile directories for runtime alpine-extra images (8.0, 9.0, 10.0, 11.0)
    • Create Dockerfile directories for aspnet alpine-extra images (8.0, 9.0, 10.0, 11.0)
    • Add manifest.json entries for runtime alpine-extra images
    • Add manifest.json entries for aspnet alpine-extra images
    • Generate Dockerfiles from templates
    • Update MCR tags metadata templates
    • Generate READMEs from templates
    • Update TestData.cs to include runtime and aspnet support for alpine-extra images
    • Update internal Dockerfile baselines
    • Run pre-build validation tests (137 passed)
  • Add aspnet alpine-composite-extra images
    • Create Dockerfile directories for aspnet alpine-composite-extra images (8.0, 9.0, 10.0, 11.0)
    • Add manifest.json entries for aspnet alpine-composite-extra images
    • Update aspnet-tags.yml with alpine-composite-extra tag groups
    • Update TestData.cs to include alpine-composite-extra test entries
    • Generate Dockerfiles and READMEs from templates
    • Update internal Dockerfile baselines
    • Run pre-build validation tests (137 passed)

Summary

Added official alpine-extra images for runtime, aspnet, and aspnet composite repos with globalization support (ICU and tzdata), covering:

  • .NET 8.0, 9.0, 10.0: Alpine 3.22 and Alpine 3.23
  • .NET 11.0: Alpine 3.23 only
  • amd64, arm32v7, and arm64v8 architectures
Original prompt

This section details on the original issue you should resolve

<issue_title>Provide an official ASP.NET alpine-extra image with globalization support (ICU and tzdata)</issue_title>
<issue_description>Please reconsider providing an official alpine-extra image for ASP.NET (and runtime) that supports globalization.

This announcement mentions:

We don't plan to offer runtime and aspnet images based on 8.0-jammy-chiseled-extra. We will re-consider that if there is sufficient demand.

Currently, we are either forced to:

This goes against the "Batteries included and Choose your own adventure" themes in the announcement.
We would like to concentrate on developing apps, not maintaining custom containers.

Thank you.

EDIT: For anyone looking to get the smallest image in the meantime, you can use the the runtime-deps:8.0-alpine-extra image like this:

dotnet publish --os linux-musl --self-contained true -p:ContainerBaseImage=mcr.microsoft.com/dotnet/runtime-deps:8.0-alpine-extra -p:PublishProfile=DefaultContainer
</issue_description>

<agent_instructions>Add alpine-extra images for the following repos/platforms:

  • Alpine 3.22 and Alpine 3.23
  • All architectures
  • .NET 8.0, 9.0, 10.0, and 11.0
  • aspnet and runtime repos.

Follow the patterns used for other -extra images (ubuntu chiseled and azurelinux-distroless). Since there are already alpine extra images for the runtime-deps repo, this should require minimal (if any) modifications to the Dockerfile templates. The new runtime images should be based on the alpine-extra runtime-deps images, and the new aspnet images should be based on the new alpine-extra runtime images.</agent_instructions>

Comments on the Issue (you are @copilot in this section)

@mthalman @DanielLaberge - based on the referenced issue at https://github.com/dotnet/sdk-container-builds/issues/512, I'm assuming this is in the context of wanting to use the SDK container publishing feature and that you don't want to have to maintain your own Dockerfile. Is that correct? @richlander You could use self-contained deployment with the `runtime-deps:8.0-alpine-extra` image with SDK OCI publishing. Can you share why that isn't satisfactory?

This goes against the "Batteries included and Choose your own adventure" themes in the announcement.

I'm glad that folks read our announcements!</comment_new>
<comment_new>@lbussell
Could you try adding the argument --self-contained true to your publish command, or adding <SelfContained>true</SelfContained> property to your csproj?

Also adding @baronfel.</comment_new>
<comment_new>@richlander
Switch to:

dotnet publish --os linux-musl 

You are saying "I want an app compatible with Linux glibc" when you want one compatible with musl (what Alpine uses).

If you are building on x64, then you can skip --arch x64. Also -c Release can be skipped. That's now the default for dotnet publish.

After we get this resolved, you can try trimming to try to make the image smaller, with -p:PublishTrimmed=true.

We have not rejected the overall request. It makes sense to see if this works.</comment_new>
<comment_new>@richlander
Can you file a bug on dotnet/sdk with your findings on supported RuntimeIdentifiers. You are correct with your interpretation. Only linux-musl variants should be offered there.

Part of the reason that Alpine images are smaller is because they use a different libc variant called musl. That makes Alpine incompatible with software compiled for Ubuntu, for example. This is a generic problem. For example Project Portola was established to create a Java port for Alpine. We didn't make such a big deal of doing the work, but it wasn't cheap.

This complexity leaks out to users. This is what RIDs are for. We've tried to hide that with this -a and --os arguments. Still, you need to know how linux and linux-musl are different. This isn't needed in a Dockerfile if you use the Alpine SDK since dotnet publish defaults to linux-musl in that context. With SDK publish run on your dev machine (likely not Alpine), then you need to address this inherent targeting complexity.

I hope that explanation helps.</comment_new>
<comment_new>@lbussell
[Triage] @DanielLaberge, it seems like your problem is resolved, right?

We will leave this issue open in o...

Custom agent used: image-manager
Manages .NET Docker images including adding images for new .NET versions, new Linux distros (Alpine, Ubuntu, Azure Linux), and new Windows versions. Handles Dockerfile templates, manifest updates, test data, and README generation.


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Co-authored-by: lbussell <36081148+lbussell@users.noreply.github.com>
Copilot AI changed the title [WIP] Add official ASP.NET alpine-extra image with globalization support Add alpine-extra images for runtime and aspnet repos Dec 23, 2025
Copilot AI requested a review from lbussell December 23, 2025 18:32
@lbussell
Copy link
Member

@copilot we need to add aspnet composite-extra images for Alpine as well. Follow the same patterns as other composite-extra images.

Co-authored-by: lbussell <36081148+lbussell@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Dec 23, 2025

@copilot we need to add aspnet composite-extra images for Alpine as well. Follow the same patterns as other composite-extra images.

Added aspnet composite-extra images for Alpine following the same patterns as other composite-extra images. This includes alpine3.22-composite-extra and alpine3.23-composite-extra images for .NET 8.0, 9.0, 10.0, and alpine3.23-composite-extra for .NET 11.0 across all architectures (amd64, arm32v7, arm64v8). Commit: 6964dce

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 11vvsblobprodcus336.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • 37cvsblobprodcus359.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • 5rqvsblobprodcus385.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • aka.ms
    • Triggering command: /usr/bin/curl curl -I -sSL --retry 5 --retry-delay 2 --connect-timeout 15 REDACTED (dns block)
  • frdvsblobprodcus327.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • gervsblobprodcus329.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • h6tvsblobprodcus346.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • ibzvsblobprodcus369.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • jd4vsblobprodcus366.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • kmuvsblobprodcus389.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • l49vsblobprodcus358.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • n3kvsblobprodcus335.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • p2ovsblobprodcus312.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • pe4vsblobprodcus351.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • u6ovsblobprodcus377.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)
  • yluvsblobprodcus367.vsblob.vsassets.io
    • Triggering command: /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet /home/REDACTED/work/dotnet-docker/dotnet-docker/.dotnet/dotnet test --filter VerifyInternalDockerfilesOutput&amp;(Category=pre-build) --logger:trx (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@lbussell lbussell marked this pull request as ready for review December 23, 2025 22:59
@lbussell lbussell requested a review from a team as a code owner December 23, 2025 22:59
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