dotnet 8
Runtime · Language runtime · standard · v8
Hardened .NET SDK (build and run). Latest 3 stable, including LTS (8/9/10).
Version line
The latest line lives at the base page; older lines have their own page so you can pin and verify exactly that version.
Use it as a base image
Reference it in the FROM line of your Dockerfile. Nonroot, read-only
root filesystem, built for amd64 and arm64.
FROM ghcr.io/quenchworks/images/dotnet:8 Or pull it directly
docker pull ghcr.io/quenchworks/images/dotnet:8 - Version line
- 8
- Latest line
- 8, 9, 10
- Architectures
- amd64, arm64
- Runs as
- nonroot (uid 1001)
- Root filesystem
- read-only
- License
- MIT
Verify the supply chain
This image is cosign-signed and carries an SPDX SBOM and a SLSA build-provenance attestation on the same digest. Check all three before you build on it:
# 1. signature — built and signed by QuenchWorks CI
cosign verify ghcr.io/quenchworks/images/dotnet:8 \
--certificate-identity-regexp 'https://github.com/quenchworks/.+' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
# 2. SLSA build provenance — which workflow built it, from what
gh attestation verify oci://ghcr.io/quenchworks/images/dotnet:8 --owner quenchworks
# 3. SPDX SBOM — the package inventory
gh attestation verify oci://ghcr.io/quenchworks/images/dotnet:8 --owner quenchworks \
--predicate-type https://spdx.dev/Document See the SBOM & provenance guide for reading the SBOM and using these checks in CI.
Best-practice Dockerfile for 8
Restore and dotnet publish in Release with the full SDK, then run the published output on the aspnet base for web apps. The SDK and the NuGet cache stay in the build stage.
# Build stage: restore, then publish the app.FROM ghcr.io/quenchworks/images/dotnet:8 AS buildUSER rootWORKDIR /srcENV NUGET_PACKAGES=/tmp/nuget \ DOTNET_CLI_TELEMETRY_OPTOUT=1
COPY ["App.csproj", "./"]RUN ["dotnet", "restore", "App.csproj"]COPY . .RUN ["dotnet", "publish", "App.csproj", "-c", "Release", "-o", "/app/publish", "--no-restore"]
# Runtime stage: ASP.NET Core runtime, nonroot.FROM ghcr.io/quenchworks/images/aspnet:8 AS runtimeWORKDIR /appENV ASPNETCORE_URLS=http://+:8080 \ DOTNET_CLI_TELEMETRY_OPTOUT=1COPY --from=build /app/publish ./USER 1001EXPOSE 8080ENTRYPOINT ["dotnet", "App.dll"]This Dockerfile is pinned to the 8 line. For the line-by-line walkthrough and ecosystem variants (npm/Yarn, pip/uv/Poetry, Maven/Gradle), see the Build a .NET app guide.
Upstream project: https://github.com/dotnet/runtime