Azure SQL Database Dev Container Templates 2.0.0
Paste as the body of the GitHub release for tag v2.0.0 (or the per-template tags the release workflow
creates). Keep the "Breaking changes" section near the top; it is the part existing users need.
The four templates were last updated in July 2024 and had stopped building. This release replaces the
retired SQL engine, brings every runtime and tool up to a supported version, and adds tests that can
actually fail.
Breaking changes
- The SQL engine changed. Azure SQL Edge (retired 2025-09-30) is replaced by SQL Server 2025,
mcr.microsoft.com/mssql/server:2025-latest, Developer edition. Re-apply the template rather than
editing an existing container. - Default runtime versions moved to .NET 10, Python 3.14, and Node.js 24. .NET 8 is still offered
until its end of support on 2026-11-10; Node 18 and 20 and thebullseyevariants are gone. - The Python template uses
mssql-python, Microsoft's driver, instead of pyodbc with ODBC Driver 17.
It needs no system ODBC install. pyodbc still works if you add it yourself. - Committed build outputs were removed. The SQL Database project is built on container create, so
there is no dacpac in the repository.
Fixed
- The templates build again. Every template failed at the first
RUNline in its Dockerfile, on x64
and Arm alike: the pinned base images carried an expired Yarn apt key, and thebullseyedefaults hit
Debian 11's expired security repository. - Apple Silicon works. The app container runs natively on Arm. Three pieces were x64-only: .NET from
the Debian apt feed, ODBC Driver 17, and the SqlPackage zip. Every installed binary is now checked
against the container's architecture. - The
LocalDevconnection profile connects. It carried${env:MSSQL_SA_PASSWORD}, which nothing
expands in VS Code settings, so the saved profile had an empty password and prompted on first use. It
now uses${containerEnv:MSSQL_SA_PASSWORD}, which the dev container tooling resolves from the
container's environment, keeping the password in.devcontainer/.envonly. - Deprecated extension ids removed.
github.copilotredirects to a built-in extension in some VS Code
builds, and the failed install tookms-vscode.vscode-node-azure-packdown with it. - The database is ready before the container is. A compose health check replaced a polling loop, and a
failed SQL project build no longer reports success.
Changed
- Microsoft.Build.Sql 2.2.0, SqlPackage installed as a .NET tool, go-sqlcmd 1.10.0 fetched per
architecture with a pinned checksum, Azure CLI 2.90, and Aspire 13.5 through the Aspire CLI. The Aspire
workload, obsolete since Aspire 9, is gone. - The SQL Database project still targets Azure SQL Database (
SqlAzureV12DatabaseSchemaProvider). That
build, not the local engine, is what tells you whether your schema will work in Azure SQL Database. - Actions are pinned by commit SHA, and Dependabot now watches features, compose images and actions.
- Screenshots moved to
docs/, so they are no longer copied into every project created from a template.
Testing
CI ran nothing before this release: it filtered for a template deleted in 2024, called scripts that did
not exist, and was marked continue-on-error. Now every pull request runs a smoke test per template on
ubuntu-latest and ubuntu-24.04-arm, plus a static job that pins what this release promises: template
ids, the Azure SQL Database target, the Library schema and seed, the connection profile, port 1433, and
the compose shape.
Locally, test/gauntlet.sh runs the whole thing: 15 configurations, 486 checks, 12 planted defects that
must all be caught, 42 negative controls, and a supply-chain layer.
Known limits
- SQL Server 2025 is x64 only. On Apple Silicon it runs under emulation, which Microsoft does not test or
support. - SQL Server occasionally crashes while starting and dumps core: 1 start in 37 under emulation, and once
on a native x64 CI runner. Rebuild the container. - The database service is capped at 2 GB, SQL Server's documented minimum.
- Behind a proxy that blocks NuGet, npm or PyPI, container creation fails while installing tools. Each
template's notes have a troubleshooting section.
Full comparison: 1.2.2...2.0.0