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/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); } /// 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"; 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}" }, 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"