From bfa5e28db6c61d29cf842234a26e5f4b2400f9f1 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Tue, 28 Oct 2025 21:23:13 +0000 Subject: [PATCH 1/5] Update/bump container image tags for hosting components - ServiceBus: SqlServerTag 2022-latest -> 2025-latest - Kafka: Tag 8.0.0 -> 8.1.0 - Keycloak: Tag 26.3 -> 26.4 - MongoDB: Tag 8.0 -> 8.2 - MySql: Tag 9.4 -> 9.5 - NATS: Tag 2.11 -> 2.12 - Oracle: Tag 23.9.0.0 -> 23.26.0.0 - Postgres: Tag 17.6 -> 18.0; PgAdminTag 9.7.0 -> 9.9.0 - Qdrant: Tag v1.15.4 -> v1.15.5 - RabbitMQ: Tag 4.1 -> 4.2 --- .../ServiceBusEmulatorContainerImageTags.cs | 4 ++-- src/Aspire.Hosting.Kafka/KafkaContainerImageTags.cs | 4 ++-- src/Aspire.Hosting.Keycloak/KeycloakContainerImageTags.cs | 4 ++-- src/Aspire.Hosting.MongoDB/MongoDBContainerImageTags.cs | 4 ++-- src/Aspire.Hosting.MySql/MySqlContainerImageTags.cs | 4 ++-- src/Aspire.Hosting.Nats/NatsContainerImageTags.cs | 4 ++-- src/Aspire.Hosting.Oracle/OracleContainerImageTags.cs | 4 ++-- .../PostgresContainerImageTags.cs | 8 ++++---- src/Aspire.Hosting.Qdrant/QdrantContainerImageTags.cs | 4 ++-- src/Aspire.Hosting.RabbitMQ/RabbitMQContainerImageTags.cs | 4 ++-- 10 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/Aspire.Hosting.Azure.ServiceBus/ServiceBusEmulatorContainerImageTags.cs b/src/Aspire.Hosting.Azure.ServiceBus/ServiceBusEmulatorContainerImageTags.cs index ae0d899f0e1..31adc9c70f3 100644 --- a/src/Aspire.Hosting.Azure.ServiceBus/ServiceBusEmulatorContainerImageTags.cs +++ b/src/Aspire.Hosting.Azure.ServiceBus/ServiceBusEmulatorContainerImageTags.cs @@ -20,6 +20,6 @@ internal static class ServiceBusEmulatorContainerImageTags /// mssql/server public const string SqlServerImage = "mssql/server"; - /// 2022-latest - public const string SqlServerTag = "2022-latest"; + /// 2025-latest + public const string SqlServerTag = "2025-latest"; } diff --git a/src/Aspire.Hosting.Kafka/KafkaContainerImageTags.cs b/src/Aspire.Hosting.Kafka/KafkaContainerImageTags.cs index 617173ec59f..85c5a41ee49 100644 --- a/src/Aspire.Hosting.Kafka/KafkaContainerImageTags.cs +++ b/src/Aspire.Hosting.Kafka/KafkaContainerImageTags.cs @@ -11,8 +11,8 @@ internal static class KafkaContainerImageTags /// confluentinc/confluent-local public const string Image = "confluentinc/confluent-local"; - /// 8.0.0 - public const string Tag = "8.0.0"; + /// 8.1.0 + public const string Tag = "8.1.0"; /// kafbat/kafka-ui public const string KafkaUiImage = "kafbat/kafka-ui"; diff --git a/src/Aspire.Hosting.Keycloak/KeycloakContainerImageTags.cs b/src/Aspire.Hosting.Keycloak/KeycloakContainerImageTags.cs index 16774f2cf96..284c9d939e7 100644 --- a/src/Aspire.Hosting.Keycloak/KeycloakContainerImageTags.cs +++ b/src/Aspire.Hosting.Keycloak/KeycloakContainerImageTags.cs @@ -11,8 +11,8 @@ internal static class KeycloakContainerImageTags /// keycloak/keycloak public const string Image = "keycloak/keycloak"; - /// 26.3 - public const string Tag = "26.3"; + /// 26.4 + public const string Tag = "26.4"; // 1000> public const int ContainerUser = 1000; diff --git a/src/Aspire.Hosting.MongoDB/MongoDBContainerImageTags.cs b/src/Aspire.Hosting.MongoDB/MongoDBContainerImageTags.cs index 755c5485da3..d3c8cf5427c 100644 --- a/src/Aspire.Hosting.MongoDB/MongoDBContainerImageTags.cs +++ b/src/Aspire.Hosting.MongoDB/MongoDBContainerImageTags.cs @@ -11,8 +11,8 @@ internal static class MongoDBContainerImageTags /// library/mongo public const string Image = "library/mongo"; - /// 8.0 - public const string Tag = "8.0"; + /// 8.2 + public const string Tag = "8.2"; /// docker.io public const string MongoExpressRegistry = "docker.io"; diff --git a/src/Aspire.Hosting.MySql/MySqlContainerImageTags.cs b/src/Aspire.Hosting.MySql/MySqlContainerImageTags.cs index 4cf4a86500a..b7710dcebfe 100644 --- a/src/Aspire.Hosting.MySql/MySqlContainerImageTags.cs +++ b/src/Aspire.Hosting.MySql/MySqlContainerImageTags.cs @@ -11,8 +11,8 @@ internal static class MySqlContainerImageTags /// library/mysql public const string Image = "library/mysql"; - /// 9.4 - public const string Tag = "9.4"; + /// 9.5 + public const string Tag = "9.5"; /// library/phpmyadmin public const string PhpMyAdminImage = "library/phpmyadmin"; diff --git a/src/Aspire.Hosting.Nats/NatsContainerImageTags.cs b/src/Aspire.Hosting.Nats/NatsContainerImageTags.cs index ba6b3683ba5..21492c4bf7a 100644 --- a/src/Aspire.Hosting.Nats/NatsContainerImageTags.cs +++ b/src/Aspire.Hosting.Nats/NatsContainerImageTags.cs @@ -11,6 +11,6 @@ internal static class NatsContainerImageTags /// library/nats public const string Image = "library/nats"; - /// 2.11 - public const string Tag = "2.11"; + /// 2.12 + public const string Tag = "2.12"; } diff --git a/src/Aspire.Hosting.Oracle/OracleContainerImageTags.cs b/src/Aspire.Hosting.Oracle/OracleContainerImageTags.cs index 13d8e021d14..bd23679dfba 100644 --- a/src/Aspire.Hosting.Oracle/OracleContainerImageTags.cs +++ b/src/Aspire.Hosting.Oracle/OracleContainerImageTags.cs @@ -11,6 +11,6 @@ internal static class OracleContainerImageTags /// database/free public const string Image = "database/free"; - /// 23.9.0.0 - public const string Tag = "23.9.0.0"; + /// 23.26.0.0 + public const string Tag = "23.26.0.0"; } diff --git a/src/Aspire.Hosting.PostgreSQL/PostgresContainerImageTags.cs b/src/Aspire.Hosting.PostgreSQL/PostgresContainerImageTags.cs index 47ea5d5c0af..3910ca22668 100644 --- a/src/Aspire.Hosting.PostgreSQL/PostgresContainerImageTags.cs +++ b/src/Aspire.Hosting.PostgreSQL/PostgresContainerImageTags.cs @@ -11,8 +11,8 @@ internal static class PostgresContainerImageTags /// library/postgres public const string Image = "library/postgres"; - /// 17.6 - public const string Tag = "17.6"; + /// 18.0 + public const string Tag = "18.0"; /// docker.io public const string PgAdminRegistry = "docker.io"; @@ -20,8 +20,8 @@ internal static class PostgresContainerImageTags /// dpage/pgadmin4 public const string PgAdminImage = "dpage/pgadmin4"; - /// 9.7.0 - public const string PgAdminTag = "9.7.0"; + /// 9.9.0 + public const string PgAdminTag = "9.9.0"; /// docker.io public const string PgWebRegistry = "docker.io"; diff --git a/src/Aspire.Hosting.Qdrant/QdrantContainerImageTags.cs b/src/Aspire.Hosting.Qdrant/QdrantContainerImageTags.cs index d496512b569..35c592e68e3 100644 --- a/src/Aspire.Hosting.Qdrant/QdrantContainerImageTags.cs +++ b/src/Aspire.Hosting.Qdrant/QdrantContainerImageTags.cs @@ -11,7 +11,7 @@ internal static class QdrantContainerImageTags /// qdrant/qdrant public const string Image = "qdrant/qdrant"; - /// v1.15.4 - public const string Tag = "v1.15.4"; + /// v1.15.5 + public const string Tag = "v1.15.5"; } diff --git a/src/Aspire.Hosting.RabbitMQ/RabbitMQContainerImageTags.cs b/src/Aspire.Hosting.RabbitMQ/RabbitMQContainerImageTags.cs index 3973ed3d1d0..6c573260c26 100644 --- a/src/Aspire.Hosting.RabbitMQ/RabbitMQContainerImageTags.cs +++ b/src/Aspire.Hosting.RabbitMQ/RabbitMQContainerImageTags.cs @@ -11,8 +11,8 @@ internal static class RabbitMQContainerImageTags /// library/rabbitmq public const string Image = "library/rabbitmq"; - /// 4.1 - public const string Tag = "4.1"; + /// 4.2 + public const string Tag = "4.2"; /// -management public const string ManagementTag = $"{Tag}-management"; From 4cd9dc93b6e323be2e5a9a1ac9ff15b1771066ac Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Tue, 28 Oct 2025 23:45:02 +0000 Subject: [PATCH 2/5] Handle PostgreSQL 18+ data layout and checksum compatibility - Add --no-data-checksums to POSTGRES_INITDB_ARGS to avoid init failures when reusing existing volumes (PG18+ enables data checksums by default). - Change data volume and bind mount target from /var/lib/postgresql/data to /var/lib/postgresql to support PG18+'s major-version-specific subdirectories. - Add explanatory comments for both changes. --- .../PostgresBuilderExtensions.cs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Aspire.Hosting.PostgreSQL/PostgresBuilderExtensions.cs b/src/Aspire.Hosting.PostgreSQL/PostgresBuilderExtensions.cs index 780d65cc401..733d69b3cc8 100644 --- a/src/Aspire.Hosting.PostgreSQL/PostgresBuilderExtensions.cs +++ b/src/Aspire.Hosting.PostgreSQL/PostgresBuilderExtensions.cs @@ -106,7 +106,10 @@ public static IResourceBuilder AddPostgres(this IDistrib .WithImage(PostgresContainerImageTags.Image, PostgresContainerImageTags.Tag) .WithImageRegistry(PostgresContainerImageTags.Registry) .WithEnvironment("POSTGRES_HOST_AUTH_METHOD", "scram-sha-256") - .WithEnvironment("POSTGRES_INITDB_ARGS", "--auth-host=scram-sha-256 --auth-local=scram-sha-256") + // PostgreSQL 18+ enables data checksums by default. We disable them to maintain backward compatibility + // with existing volumes that don't have checksums enabled, preventing initialization failures when + // reusing data directories from earlier versions. + .WithEnvironment("POSTGRES_INITDB_ARGS", "--auth-host=scram-sha-256 --auth-local=scram-sha-256 --no-data-checksums") .WithEnvironment(context => { context.EnvironmentVariables[UserEnvVarName] = postgresServer.UserNameReference; @@ -369,8 +372,12 @@ public static IResourceBuilder WithDataVolume(this IReso { ArgumentNullException.ThrowIfNull(builder); + // PostgreSQL 18+ Docker images changed the data directory structure to use major-version-specific + // subdirectories (e.g., /var/lib/postgresql/data/18). The mount point must be /var/lib/postgresql + // instead of /var/lib/postgresql/data to accommodate this change. Prior to PostgreSQL 18, the + // mount point was /var/lib/postgresql/data. return builder.WithVolume(name ?? VolumeNameGenerator.Generate(builder, "data"), - "/var/lib/postgresql/data", isReadOnly); + "/var/lib/postgresql", isReadOnly); } /// @@ -385,7 +392,11 @@ public static IResourceBuilder WithDataBindMount(this IR ArgumentNullException.ThrowIfNull(builder); ArgumentException.ThrowIfNullOrEmpty(source); - return builder.WithBindMount(source, "/var/lib/postgresql/data", isReadOnly); + // PostgreSQL 18+ Docker images changed the data directory structure to use major-version-specific + // subdirectories (e.g., /var/lib/postgresql/data/18). The mount point must be /var/lib/postgresql + // instead of /var/lib/postgresql/data to accommodate this change. Prior to PostgreSQL 18, the + // mount point was /var/lib/postgresql/data. + return builder.WithBindMount(source, "/var/lib/postgresql", isReadOnly); } /// From 16bf9e1bb57dbc38172325199032c22561f1fac5 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Tue, 28 Oct 2025 23:55:31 +0000 Subject: [PATCH 3/5] Expect --no-data-checksums in POSTGRES_INITDB_ARGS in PostgreSQL tests and manifests --- .../AddPostgresTests.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/Aspire.Hosting.PostgreSQL.Tests/AddPostgresTests.cs b/tests/Aspire.Hosting.PostgreSQL.Tests/AddPostgresTests.cs index e88c2c8c54c..e40be45c763 100644 --- a/tests/Aspire.Hosting.PostgreSQL.Tests/AddPostgresTests.cs +++ b/tests/Aspire.Hosting.PostgreSQL.Tests/AddPostgresTests.cs @@ -79,7 +79,7 @@ public async Task AddPostgresWithDefaultsAddsAnnotationMetadata() env => { Assert.Equal("POSTGRES_INITDB_ARGS", env.Key); - Assert.Equal("--auth-host=scram-sha-256 --auth-local=scram-sha-256", env.Value); + Assert.Equal("--auth-host=scram-sha-256 --auth-local=scram-sha-256 --no-data-checksums", env.Value); }, env => { @@ -133,7 +133,7 @@ public async Task AddPostgresAddsAnnotationMetadata() env => { Assert.Equal("POSTGRES_INITDB_ARGS", env.Key); - Assert.Equal("--auth-host=scram-sha-256 --auth-local=scram-sha-256", env.Value); + Assert.Equal("--auth-host=scram-sha-256 --auth-local=scram-sha-256 --no-data-checksums", env.Value); }, env => { @@ -226,7 +226,7 @@ public async Task AddDatabaseToPostgresAddsAnnotationMetadata() env => { Assert.Equal("POSTGRES_INITDB_ARGS", env.Key); - Assert.Equal("--auth-host=scram-sha-256 --auth-local=scram-sha-256", env.Value); + Assert.Equal("--auth-host=scram-sha-256 --auth-local=scram-sha-256 --no-data-checksums", env.Value); }, env => { @@ -257,7 +257,7 @@ public async Task VerifyManifest() "image": "{{PostgresContainerImageTags.Registry}}/{{PostgresContainerImageTags.Image}}:{{PostgresContainerImageTags.Tag}}", "env": { "POSTGRES_HOST_AUTH_METHOD": "scram-sha-256", - "POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256", + "POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256 --no-data-checksums", "POSTGRES_USER": "postgres", "POSTGRES_PASSWORD": "{pg-password.value}" }, @@ -300,7 +300,7 @@ public async Task VerifyManifestWithParameters() "image": "{{PostgresContainerImageTags.Registry}}/{{PostgresContainerImageTags.Image}}:{{PostgresContainerImageTags.Tag}}", "env": { "POSTGRES_HOST_AUTH_METHOD": "scram-sha-256", - "POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256", + "POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256 --no-data-checksums", "POSTGRES_USER": "{user.value}", "POSTGRES_PASSWORD": "{pass.value}" }, @@ -326,7 +326,7 @@ public async Task VerifyManifestWithParameters() "image": "{{PostgresContainerImageTags.Registry}}/{{PostgresContainerImageTags.Image}}:{{PostgresContainerImageTags.Tag}}", "env": { "POSTGRES_HOST_AUTH_METHOD": "scram-sha-256", - "POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256", + "POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256 --no-data-checksums", "POSTGRES_USER": "{user.value}", "POSTGRES_PASSWORD": "{pg2-password.value}" }, @@ -352,7 +352,7 @@ public async Task VerifyManifestWithParameters() "image": "{{PostgresContainerImageTags.Registry}}/{{PostgresContainerImageTags.Image}}:{{PostgresContainerImageTags.Tag}}", "env": { "POSTGRES_HOST_AUTH_METHOD": "scram-sha-256", - "POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256", + "POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256 --no-data-checksums", "POSTGRES_USER": "postgres", "POSTGRES_PASSWORD": "{pass.value}" }, From c26a1678f914fc07f8cbd8fc5af6e7110c902632 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Wed, 29 Oct 2025 16:04:04 +0000 Subject: [PATCH 4/5] Update manifest test to expect --no-data-checksums in POSTGRES_INITDB_ARGS --- tests/Aspire.Hosting.Tests/ManifestGenerationTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Aspire.Hosting.Tests/ManifestGenerationTests.cs b/tests/Aspire.Hosting.Tests/ManifestGenerationTests.cs index 4cd53c05c89..9ef6e138755 100644 --- a/tests/Aspire.Hosting.Tests/ManifestGenerationTests.cs +++ b/tests/Aspire.Hosting.Tests/ManifestGenerationTests.cs @@ -441,7 +441,7 @@ public void VerifyTestProgramFullManifest() "image": "{{ComponentTestConstants.AspireTestContainerRegistry}}/{{PostgresContainerImageTags.Image}}:{{PostgresContainerImageTags.Tag}}", "env": { "POSTGRES_HOST_AUTH_METHOD": "scram-sha-256", - "POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256", + "POSTGRES_INITDB_ARGS": "--auth-host=scram-sha-256 --auth-local=scram-sha-256 --no-data-checksums", "POSTGRES_USER": "postgres", "POSTGRES_PASSWORD": "{postgres-password.value}", "POSTGRES_DB": "postgresdb" From bd4a03b4e5f2913d57d6954408d2eada89aef9a5 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Wed, 29 Oct 2025 10:58:39 -0700 Subject: [PATCH 5/5] Update src/Aspire.Hosting.Azure.ServiceBus/ServiceBusEmulatorContainerImageTags.cs --- .../ServiceBusEmulatorContainerImageTags.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Aspire.Hosting.Azure.ServiceBus/ServiceBusEmulatorContainerImageTags.cs b/src/Aspire.Hosting.Azure.ServiceBus/ServiceBusEmulatorContainerImageTags.cs index 31adc9c70f3..ae0d899f0e1 100644 --- a/src/Aspire.Hosting.Azure.ServiceBus/ServiceBusEmulatorContainerImageTags.cs +++ b/src/Aspire.Hosting.Azure.ServiceBus/ServiceBusEmulatorContainerImageTags.cs @@ -20,6 +20,6 @@ internal static class ServiceBusEmulatorContainerImageTags /// mssql/server public const string SqlServerImage = "mssql/server"; - /// 2025-latest - public const string SqlServerTag = "2025-latest"; + /// 2022-latest + public const string SqlServerTag = "2022-latest"; }