Skip to content

Conversation

dependabot[bot]
Copy link

@dependabot dependabot bot commented on behalf of github Sep 3, 2025

Updated Testcontainers from 3.6.0 to 4.7.0.

Release notes

Sourced from Testcontainers's releases.

4.7.0

What's Changed

This release doesn't introduce breaking changes to the public API, but it isn't binary compatible due to necessary internal changes. Make sure to update all related packages (Testcontainers modules) to the same version. See more details here. Thanks to all contributors 👏.

⚠️ Breaking Changes

  • feat(Kafka): Add KRaft support (#​1353) @​SukharevAndrey
  • feat: Add ability to override enumerable builder values (#​1506) @​HofmeisterAn

🚀 Features

  • feat: Add wait strategy to check external (TCP) port availability (#​1495) @​WhiteTomX
  • feat(Kafka): Add KRaft support (#​1353) @​SukharevAndrey
  • feat: Relax Base64 auth provider and ignore path segments in Docker registry URLs (#​1516) @​HofmeisterAn
  • feat: Add ability to override enumerable builder values (#​1506) @​HofmeisterAn
  • feat(Elasticsearch): Return HTTP connection string if security is disabled (#​1494) @​HofmeisterAn
  • fix: Add tooling to inherit XML docs (#​1493) @​HofmeisterAn
  • feat: Resolve .slnx (solution) file in common directory paths (#​1492) @​alexander-jesner-AP
  • feat: Support getting all mapped ports (#​1485) @​HofmeisterAn
  • feat: Add named pipe connection timeout custom configuration (#​1480) @​HofmeisterAn

🐛 Bug Fixes

  • feat(Kafka): Add KRaft support (#​1353) @​SukharevAndrey
  • fix: Send valid HTTP test responses (#​1505) @​HofmeisterAn
  • fix: Use null-conditional operator to access FinishedAt (#​1499) @​HofmeisterAn
  • fix: Remove timeout that kills PID 1 when stopping a container (#​1481) @​HofmeisterAn
  • fix(Pulsar): Wait until the consumer becomes connected (#​1467) @​HofmeisterAn
  • fix(ServiceBus): Remove container lifecycle overrides (#​1465) @​HofmeisterAn

📖 Documentation

  • docs: Explain how to substitute the Docker Hub registry (#​1503) @​HofmeisterAn
  • docs: Extend example copying files to a container (#​1487) @​cimnine

🧹 Housekeeping

  • chore: Change Kafka vendor configuration from class to interface (#​1519) @​HofmeisterAn
  • chore: Bump Docker.DotNet version to 3.128.5 (#​1511) @​HofmeisterAn
  • chore: Build a single project instead of the whole solution (#​1502) @​HofmeisterAn

4.6.0

What's Changed

This is a patch release (but the minor version was already set). It fixes a bug in our Docker.DotNet fork where a wrong HTTP Connection header break Podman and possibly other environments. Shipped a quick fix. Thanks again to @​ahaeber and @​victor-lambret for the help.

🐛 Bug Fixes

  • chore: Bump Docker.DotNet version to 3.128.3 (#​1462) @​HofmeisterAn

🧹 Housekeeping

  • chore: Bump Docker.DotNet version to 3.128.3 (#​1462) @​HofmeisterAn

4.5.0

What's Changed

Big thanks to everyone who contributed to this release 🤜🤛.

🚀 Features

  • feat: Add OpenSearch module (#​1395) @​digital88
  • feat: Add Typesense module (#​1446) @​brainded
  • feat: Add Task<ExecResult> extension method ThrowOnFailure (#​1448) @​HofmeisterAn
  • feat: Throw DockerUnavailableException when Docker is not available (#​1308) @​0xced
  • feat: Improve error reporting when loading the Docker configuration file (#​1263) @​0xced
  • feat: Add a wait strategy that waits until the ADO.NET database is available (#​1401) @​0xced
  • feat: Add Ollama module (#​1099) @​frankhaugen
  • feat: Allow canceling container start in xUnit.net v3 fixtures (#​1431) @​TheConstructor
  • fix(EventHubs): Support default consumer group name (#​1432) @​scrocquesel-ml150
  • feat: Add Lowkey Vault module (#​1344) @​Xor-el
  • feat(ServiceBus): Add builder API to upload config file (#​1424) @​chasewallis

🐛 Bug Fixes

  • fix: Set container created, started, stopped time from inspect response (#​1455) @​HofmeisterAn
  • fix(EventHubs): Change predicate that it does not always evaluate to true (#​1433) @​HofmeisterAn
  • fix(EventHubs): Support default consumer group name (#​1432) @​scrocquesel-ml150

📖 Documentation

  • docs(ClickHouse): Add example (#​1421) @​digital88
  • docs: Mention the xUnit.net v3 module (package) (#​1442) @​TheConstructor

🧹 Housekeeping

  • chore: Add ExecResult serializable test data (#​1456) @​HofmeisterAn
  • chore: Remove Sonar findings (#​1450) @​HofmeisterAn
  • chore: Replace Cake .NET Tool with Cake Frosting (#​1437) @​0xced
  • chore: Update test-framework to xUnit.net v3 (#​1441) @​TheConstructor
  • chore: Bump Docker.DotNet version to 3.128.1 (#​1443) @​HofmeisterAn
  • chore: Add xUnit.net v3 tests (#​1430) @​TheConstructor
  • chore: Bump CI .NET SDK and Cake version (#​1434) @​HofmeisterAn

4.4.0

What's Changed

Time for a new release! Big thanks to everyone who helped out with this one. It's got some awesome new features and fixes 😎. Seriously, I can't thank you enough. This wouldn't be possible without your ongoing support 🙏.

🚀 Features

  • feat: Add Socat container implementation (#​1416) @​eddumelendez
  • feat(Keycloak): Support admin bootstrapping for version 26 onwards (#​1400) @​paulomorgado
  • feat: Add Qdrant module (#​1149) @​russcam
  • feat(EventHubs, ServiceBus): Replace wait strategy with HTTP health check (#​1398) @​scrocquesel-ml150
  • fix: Reflect Unix file mode when building tarball from .NET 7 onwards (#​1397) @​kfarnung

🐛 Bug Fixes

  • fix(Pulsar): Set memory limits (#​1420) @​HofmeisterAn
  • fix: Add Docker Hub image name prefix to image builder API WithName(IImage) (#​1413) @​HofmeisterAn
  • fix: Reflect Unix file mode when building tarball from .NET 7 onwards (#​1397) @​kfarnung
  • fix: Retrieve logs since CreatedTime for UntilMessageIsLogged wait strategy (#​1384) @​0xced

📖 Documentation

  • docs: Bump testcontainers/helloworld image in docs to version 1.2.0 (#​1419) @​VishnuJin
  • docs(ActiveMq): Add example (#​1415) @​digital88
  • docs: Add binding redirects doc for .NET framework (#​1414) @​HofmeisterAn
  • docs: Add Bitbucket Pipelines configuration (#​1402) @​boeckie-xenopz
  • docs(EventHubs, ServiceBus): Add example (#​1396) @​HofmeisterAn
  • docs(Cassandra): Add example (#​1382) @​gavindekock

🧹 Housekeeping

  • fix(Pulsar): Set memory limits (#​1420) @​HofmeisterAn
  • chore: Add wrapper module for Google Cloud modules (#​1411) @​digital88
  • chore: Use Docker Compose to host documentation locally (#​1410) @​digital88
  • feat(EventHubs, ServiceBus): Replace wait strategy with HTTP health check (#​1398) @​scrocquesel-ml150

4.3.0

What's Changed

Thank you to all the contributors 🙌.

🚀 Features

  • feat: Add Apache Cassandra module (#​1367) @​gavindekock
  • feat(Oracle): Add support for WithDatabase(string) for Oracle 18 and onwards (#​1321) @​0xced
  • feat: Add EventHubs module (#​1373) @​HofmeisterAn
  • feat: Add Db2 module (#​1237) @​kevin0x90

🐛 Bug Fixes

  • fix(MongoDb): Evaluate replica set status in wait strategy (#​1369) @​HofmeisterAn

🧹 Housekeeping

  • chore: Update examples implementations (#​1379) @​HofmeisterAn
  • chore: Remove SharedContainerInstance and use ContainerFixture instead (#​1378) @​0xced
  • chore: Remove code smells and bump dependencies (#​1374) @​HofmeisterAn
  • chore: Add support for macOS in Testcontainers.Db2.Tests (#​1371) @​0xced
  • chore: Add WithAcceptLicenseAgreement(bool) to container builder (#​1370) @​HofmeisterAn
  • chore: Set PackageLicenseExpression property to MIT (#​1368) @​ax-meyer

4.2.0

What's Changed

Thanks for all the contributions. Great first release of the year ❤️.

🚀 Features

  • feat: Add SFTP module (#​1362) @​wim07101993
  • feat(ServiceBus): Add support to use existing MSSQL container instances (#​1335) @​lgcmotta
  • feat: Add Weaviate module (#​1356) @​roji
  • fix(Pulsar): Support Apache Pulsar 4 (#​1355) @​entvex
  • feat: Add network support to the Kafka container (#​1316) @​SebastienDegodez
  • feat: Add pausing and unpausing container (#​1315) @​stefannikolei
  • feat: Add NAT driver network configuration (#​1328) @​HofmeisterAn

🐛 Bug Fixes

  • fix(Redpanda): Add missing command-line arguments to the startup script (smp, memory) (#​1364) @​RobotechUSA
  • chore: Remove binding of ports to IPv4 only (#​1363) @​daviian
  • feat: Add network support to the Kafka container (#​1316) @​SebastienDegodez
  • fix: Load PKCS#​12 correctly for mTLS on Windows in .NET 9 (#​1320) @​jvmdc

🧹 Housekeeping

  • fix(Redpanda): Add missing command-line arguments to the startup script (smp, memory) (#​1364) @​RobotechUSA
  • chore: Remove binding of ports to IPv4 only (#​1363) @​daviian
  • chore: Algin module configurations (#​1357) @​HofmeisterAn
  • fix: Make Testcontainers.XunitV3 publishable (#​1317) @​0xced

4.1.0

What's Changed

This is likely the last release for this year, unless urgent fixes become necessary.

I want to mention a change introduced in the last major release, where we refactored the IImage interface. As part of this update, we removed obsolete properties and overloaded constructors. If you previously used an overload other than DockerImage(string), please ensure you pass the correct values to the constructor.

Additionally, we replaced Docker.DotNet with our own fork to keep the Docker Engine API up to date. Our goal is to improve reliability and performance while offering a more developer-friendly and convenient client. If you depend on a Docker client for .NET, we encourage you to contribute to this project ❤️.

On a personal note, I wish everyone a peaceful and lovely holiday season. Take this time to rest, connect with loved ones, and recharge for the new year. Take care.

🚀 Features

  • feat: Add Azure Service Bus module (#​1309) @​HofmeisterAn
  • feat: Set ryuk.container.privileged default value to true (#​1313) @​HofmeisterAn
  • feat: Remove net6.0 and add net9.0 TFM (#​1311) @​HofmeisterAn
  • feat: Introduce a new Testcontainers.Xunit package (#​1165) @​0xced

🐛 Bug Fixes

  • fix: Postpone exception in DbContainerFixture to match the behavior of ContainerFixture (#​1310) @​0xced
  • fix: Do not pre-pull scratch image (#​1304) @​HofmeisterAn
  • fix: Add HTTP wait strategy to prevent race-condition in WaitUntilHttpRequestIsSucceededTest (#​1299) @​HofmeisterAn
  • fix: Add HTTP wait strategy to prevent race-condition in TarOutputMemoryStreamTest (#​1297) @​HofmeisterAn
  • fix: Prepend Docker Hub namespace to repository (#​1287) @​HofmeisterAn

📖 Documentation

  • docs: Add low level API access (#​1300) @​HofmeisterAn

🧹 Housekeeping

  • feat: Add Respawn example (#​1307) @​HofmeisterAn
  • chore: Add test to ensure that all test projects are configured for CI (#​1305) @​0xced
  • chore: Run each test project on a separate runner (#​1295) @​HofmeisterAn
  • chore: Replace Docker.DotNet with the Testcontainers organization's build (#​1292) @​HofmeisterAn

4.0.0

What's Changed

Thanks so much for all the effort you put into this release 🙌. We are continuing to align Testcontainers for .NET with other language implementations and working on improving the domain-specific language.

We have updated the IImage interface to follow the domain-specific language with the correct property names. The table below shows the changes. We tried to make the transition as smooth as possible, but be aware that relying on the Repository property might cause issues since it now resolves a different value than before. We have kept the old properties, marked them as obsolete, and provided guidance on how to migrate.

Actual Expected (New)
Registry - myregistryhost:5000
Repository myregistryhost:5000/fedora fedora/httpd
Name httpd -
Tag version1.0 version1.0
Digest - sha256:37a3b014d320...
GetHostname() myregistryhost:5000 myregistryhost:5000

⚠️ Breaking Changes

  • fix: Bump MSSQL image version, remove Azure SQL Edge and Papercut module (#​1265) @​HofmeisterAn
  • feat: Align IImage properties with Docker DSL (#​1256) @​HofmeisterAn

🚀 Features

  • feat: Use exec to replace current shell with the Kafka process (as ENTRYPOINT) (#​1282) @​jasoncouture
  • feat: Add getter for Azurite blob, queue and table endpoint (#​1278) @​pregress
  • feat: Reintroduce Papercut module (#​1268) @​TechLiam
  • feat: Add Neo4j Enterprise Edition support (WithEnterpriseEdition(bool)) (#​1269) @​Sossenbinder
  • feat: Support digest in IImage, DockerImage and in the WithImage(string) implementation (#​1249) @​Kielek
  • feat: Align IImage properties with Docker DSL (#​1256) @​HofmeisterAn
  • feat: Change visibility of AccountName and AccountKey to public, move to AzuriteBuilder (#​1258) @​mikecole
  • feat: Get Docker endpoint from Docker context (#​1235) @​0xced

🐛 Bug Fixes

  • fix: Bump MSSQL image version, remove Azure SQL Edge and Papercut module (#​1265) @​HofmeisterAn
  • fix: Throw exception if Docker resource does not exist instead of silently ignoring it (#​1254) @​0xced

🧹 Housekeeping

  • fix: Do not run reusable resource tests in parallel (#​1267) @​HofmeisterAn

3.10.0

Hey everyone, just wanted to say a huge thanks to all of you who helped with this version — whether through contributions, reporting issues, or discussions. I've been very busy lately, and your support has been a huge help. I really appreciate it!

What's Changed

🚀 Features

  • feat: Add MongoDB replica set support (#​1196) @​artiomchi
  • feat: Detect CSharp, FSharp and Visual Basic projects (#​1234) @​HofmeisterAn
  • feat: Improve parsing of Docker image tag version MatchVersion(Predicate<Version>) (#​1231) @​0xced
  • feat: Log Docker daemon labels if present (#​1226) @​eddumelendez

🐛 Bug Fixes

  • fix: Get sqlcmd utility file path from container instead of const file path (#​1221) @​outofrange-consulting
  • fix: Add Keycloak health port 9000 starting from major version 25 (#​1213) @​paulomorgado
  • fix: Allow specifying the protocol (TCP, UDP, SCTP) to resolve the public assigned host port (#​1219) @​wolfman42
  • fix: Trim relative path indicators from Dockerfile path (#​1203) @​HofmeisterAn

📖 Documentation

  • chore: Replace codeinclude with snippets (#​1251) @​HofmeisterAn
  • docs: Use codeinclude in module examples (#​1245) @​HofmeisterAn

🧹 Housekeeping

3.9.0

Thank you to everyone whose contributions made this release possible.

What's Changed

⚠️ Breaking Changes

The UntilOperationIsSucceeded(Func<bool>, int, Action<IWaitStrategy>) wait strategy is obsolete. Instead of this wait strategy, use any other wait strategy that matches your use case and configure the retry behavior accordingly (wait strategy options).

Using reuse together with the container builder method WithName(string) will generate a new reuse hash the first time you use the configuration. The container name was not included in calculating the reuse hash previously.

  • feat: Add wait strategy options (#​1168) @​HofmeisterAn
  • feat: Include the container name in the reuse hash (#​1162) @​0xced

🚀 Features

  • feat: Add Apache Pulsar module (#​1103) @​entvex
  • feat: Add custom configuration for retries, interval and timeout (#​1169) @​HofmeisterAn
  • feat: Add wait strategy options (#​1168) @​HofmeisterAn
  • feat: Include the container name in the reuse hash (#​1162) @​0xced

🐛 Bug Fixes

  • fix: Add default file permission (755 for image build) (#​1176) @​HofmeisterAn
  • fix(MySql): Create an empty /var/lib/mysql-files directory to prevent older versions from failing to start (#​1144) @​0xced

📖 Documentation

  • docs: Add reading file from a container (#​1151) @​HofmeisterAn

🧹 Housekeeping

  • chore: Remove PulsarContainer.CreateAuthenticationTokenAsync(TimeSpan) default arg (#​1195) @​entvex
  • chore : Do not block async context on acquire lock (#​1188) @​HofmeisterAn
  • chore: Prevent ReusableResourceTest from leaking resources (#​1164) @​0xced
  • refactor: Replace Azure SQL Edge with PostgreSQL (#​1156) @​HofmeisterAn
  • chore: Remove obsolete members (#​1146) @​HofmeisterAn

📦 Dependency Updates

  • chore: Bump BouncyCastle.Cryptography (#​1179) @​marco-carvalho
  • chore: Use new sshd:1.2.0 image (#​1160) @​mdelapenya

3.8.0

Thank you very much to all contributors once again. This version contains really great features and important fixes. Awesome increment 🙏.

What's Changed

⚠️ Breaking Changes

If you have overwritten the default logger previously (setting TestcontainersSettings.Logger), please be aware that each builder now offers a dedicated API to configure the actual logger. This has several advantages; among others, it integrates very nicely into xUnit.net's scoped loggers.

  • feat: Add WithLogger(ILogger) builder API (#​1100) @​0xced

🚀 Features

  • feat: Use built-in PEM certificate import on .NET 6 and onwards (#​1139) @​0xced
  • feat: Add WithLogger(ILogger) builder API (#​1100) @​0xced
  • feat: Add support for the target frameworks net6.0 and net8.0 (#​1133) @​HofmeisterAn
  • feat: Add Milvus module (#​1131) @​roji
  • feat: Embed symbols and enable continuous integration builds (deterministic source paths) (#​1129) @​tom-englert
  • feat: Add remote container registry identity token support (#​1124) @​HofmeisterAn
  • feat: Add URL-based resource mapping container builder API (#​1118) @​0xced
  • feat: Add CockroachDB module (#​1077) @​rafaumlemos
  • feat: Add reuse support (#​1051) @​david-szabo97

🐛 Bug Fixes

  • fix: Prevent a NullReferenceException when pulling uncached base images to build an image (#​1126) @​tom-englert
  • fix: Prevent .dockerignore entry from matching everything if it ends with globstart (#​1122) @​HofmeisterAn
  • fix: Consider the timestamp in the log message wait strategy (read the correct log message chunk) (#​1110) @​HofmeisterAn
  • fix(CosmosDb): SSL connection could not be established (#​1109) @​WakaToa

🧹 Housekeeping

  • chore: Ensure that stderr is empty after executing scripts (#​1116) @​0xced
  • chore: Use the pg_isready command to assess whether PostgreSQL is ready or not (#​1111) @​0xced
  • chore: Switch to the SDK's included Central Package Management (#​1106) @​HofmeisterAn
  • chore: Use relative ProjectReference paths instead of $(SolutionDir) (#​1094) @​0xced
  • chore: Update xUnit.net (#​1087) @​HofmeisterAn

📦 Dependency Updates

  • chore(deps): Bump Microsoft.Data.SqlClient from 5.1.0 to 5.1.3 in /tests/Testcontainers.SqlEdge.Tests (#​1088) @​dependabot
  • chore(deps): Bump Microsoft.Data.SqlClient from 5.1.0 to 5.1.3 in /tests/Testcontainers.MsSql.Tests (#​1089) @​dependabot

3.7.0

Happy New Year and a massive thank you to all the contributors who made the new version of Testcontainers for .NET possible 🙌!

What's Changed

🚀 Features

  • feat: Add Firebird SQL module (#​1073) @​park-jasper
  • feat(Azurite): Add in-memory support (#​1063) @​Xzelsius
  • feat: Add ArangoDB module (#​1058) @​ShirAvneri
  • feat: Add ActiveMQ Artemis module (#​1055) @​ShirAvneri
  • feat: Add Bigtable module (#​1046) @​peroyhav
  • feat: Add BigQuery module (#​1034) @​dejandjenic
  • feat: Add JanusGraph module (#​837) @​rngcntr
  • feat: Add Papercut module (#​1044) @​TechLiam
  • feat: Improve tar stream logging (copy files to container) (#​1050) @​HofmeisterAn

🐛 Bug Fixes

  • fix: Retry configuring Couchbase on HttpIOException (#​1064) @​mgroves

📖 Documentation

  • docs: Add ASP.NET integration test example (#​1061) @​HofmeisterAn

🧹 Housekeeping

  • chore: Update Ryuk image from version 0.5.1 to 0.6.0 (#​1084) @​HofmeisterAn
  • chore: Improve the Base64Provider resilience to malformed configuration files (#​1081) @​0xced
  • chore: Invert #if NETSTANDARD* conditional compilation conditions (#​1079) @​0xced
  • chore: Rename the file CouchDbContainerTest.cs to CouchbaseContainerTest.cs (#​1067) @​mgroves
  • chore: Replace custom wait strategy with default strategies (#​1059) @​ShirAvneri
  • chore: Remove Microsoft.SourceLink.GitHub (#​1057) @​HofmeisterAn
  • chore: Update .NET SDK to version 8 (LTS) (#​1054) @​HofmeisterAn

Commits viewable in compare view.

Updated Testcontainers.PostgreSql from 3.6.0 to 4.7.0.

Release notes

Sourced from Testcontainers.PostgreSql's releases.

4.7.0

What's Changed

This release doesn't introduce breaking changes to the public API, but it isn't binary compatible due to necessary internal changes. Make sure to update all related packages (Testcontainers modules) to the same version. See more details here. Thanks to all contributors 👏.

⚠️ Breaking Changes

  • feat(Kafka): Add KRaft support (#​1353) @​SukharevAndrey
  • feat: Add ability to override enumerable builder values (#​1506) @​HofmeisterAn

🚀 Features

  • feat: Add wait strategy to check external (TCP) port availability (#​1495) @​WhiteTomX
  • feat(Kafka): Add KRaft support (#​1353) @​SukharevAndrey
  • feat: Relax Base64 auth provider and ignore path segments in Docker registry URLs (#​1516) @​HofmeisterAn
  • feat: Add ability to override enumerable builder values (#​1506) @​HofmeisterAn
  • feat(Elasticsearch): Return HTTP connection string if security is disabled (#​1494) @​HofmeisterAn
  • fix: Add tooling to inherit XML docs (#​1493) @​HofmeisterAn
  • feat: Resolve .slnx (solution) file in common directory paths (#​1492) @​alexander-jesner-AP
  • feat: Support getting all mapped ports (#​1485) @​HofmeisterAn
  • feat: Add named pipe connection timeout custom configuration (#​1480) @​HofmeisterAn

🐛 Bug Fixes

  • feat(Kafka): Add KRaft support (#​1353) @​SukharevAndrey
  • fix: Send valid HTTP test responses (#​1505) @​HofmeisterAn
  • fix: Use null-conditional operator to access FinishedAt (#​1499) @​HofmeisterAn
  • fix: Remove timeout that kills PID 1 when stopping a container (#​1481) @​HofmeisterAn
  • fix(Pulsar): Wait until the consumer becomes connected (#​1467) @​HofmeisterAn
  • fix(ServiceBus): Remove container lifecycle overrides (#​1465) @​HofmeisterAn

📖 Documentation

  • docs: Explain how to substitute the Docker Hub registry (#​1503) @​HofmeisterAn
  • docs: Extend example copying files to a container (#​1487) @​cimnine

🧹 Housekeeping

  • chore: Change Kafka vendor configuration from class to interface (#​1519) @​HofmeisterAn
  • chore: Bump Docker.DotNet version to 3.128.5 (#​1511) @​HofmeisterAn
  • chore: Build a single project instead of the whole solution (#​1502) @​HofmeisterAn

4.6.0

What's Changed

This is a patch release (but the minor version was already set). It fixes a bug in our Docker.DotNet fork where a wrong HTTP Connection header break Podman and possibly other environments. Shipped a quick fix. Thanks again to @​ahaeber and @​victor-lambret for the help.

🐛 Bug Fixes

  • chore: Bump Docker.DotNet version to 3.128.3 (#​1462) @​HofmeisterAn

🧹 Housekeeping

  • chore: Bump Docker.DotNet version to 3.128.3 (#​1462) @​HofmeisterAn

4.5.0

What's Changed

Big thanks to everyone who contributed to this release 🤜🤛.

🚀 Features

  • feat: Add OpenSearch module (#​1395) @​digital88
  • feat: Add Typesense module (#​1446) @​brainded
  • feat: Add Task<ExecResult> extension method ThrowOnFailure (#​1448) @​HofmeisterAn
  • feat: Throw DockerUnavailableException when Docker is not available (#​1308) @​0xced
  • feat: Improve error reporting when loading the Docker configuration file (#​1263) @​0xced
  • feat: Add a wait strategy that waits until the ADO.NET database is available (#​1401) @​0xced
  • feat: Add Ollama module (#​1099) @​frankhaugen
  • feat: Allow canceling container start in xUnit.net v3 fixtures (#​1431) @​TheConstructor
  • fix(EventHubs): Support default consumer group name (#​1432) @​scrocquesel-ml150
  • feat: Add Lowkey Vault module (#​1344) @​Xor-el
  • feat(ServiceBus): Add builder API to upload config file (#​1424) @​chasewallis

🐛 Bug Fixes

  • fix: Set container created, started, stopped time from inspect response (#​1455) @​HofmeisterAn
  • fix(EventHubs): Change predicate that it does not always evaluate to true (#​1433) @​HofmeisterAn
  • fix(EventHubs): Support default consumer group name (#​1432) @​scrocquesel-ml150

📖 Documentation

  • docs(ClickHouse): Add example (#​1421) @​digital88
  • docs: Mention the xUnit.net v3 module (package) (#​1442) @​TheConstructor

🧹 Housekeeping

  • chore: Add ExecResult serializable test data (#​1456) @​HofmeisterAn
  • chore: Remove Sonar findings (#​1450) @​HofmeisterAn
  • chore: Replace Cake .NET Tool with Cake Frosting (#​1437) @​0xced
  • chore: Update test-framework to xUnit.net v3 (#​1441) @​TheConstructor
  • chore: Bump Docker.DotNet version to 3.128.1 (#​1443) @​HofmeisterAn
  • chore: Add xUnit.net v3 tests (#​1430) @​TheConstructor
  • chore: Bump CI .NET SDK and Cake version (#​1434) @​HofmeisterAn

4.4.0

What's Changed

Time for a new release! Big thanks to everyone who helped out with this one. It's got some awesome new features and fixes 😎. Seriously, I can't thank you enough. This wouldn't be possible without your ongoing support 🙏.

🚀 Features

  • feat: Add Socat container implementation (#​1416) @​eddumelendez
  • feat(Keycloak): Support admin bootstrapping for version 26 onwards (#​1400) @​paulomorgado
  • feat: Add Qdrant module (#​1149) @​russcam
  • feat(EventHubs, ServiceBus): Replace wait strategy with HTTP health check (#​1398) @​scrocquesel-ml150
  • fix: Reflect Unix file mode when building tarball from .NET 7 onwards (#​1397) @​kfarnung

🐛 Bug Fixes

  • fix(Pulsar): Set memory limits (#​1420) @​HofmeisterAn
  • fix: Add Docker Hub image name prefix to image builder API WithName(IImage) (#​1413) @​HofmeisterAn
  • fix: Reflect Unix file mode when building tarball from .NET 7 onwards (#​1397) @​kfarnung
  • fix: Retrieve logs since CreatedTime for UntilMessageIsLogged wait strategy (#​1384) @​0xced

📖 Documentation

  • docs: Bump testcontainers/helloworld image in docs to version 1.2.0 (#​1419) @​VishnuJin
  • docs(ActiveMq): Add example (#​1415) @​digital88
  • docs: Add binding redirects doc for .NET framework (#​1414) @​HofmeisterAn
  • docs: Add Bitbucket Pipelines configuration (#​1402) @​boeckie-xenopz
  • docs(EventHubs, ServiceBus): Add example (#​1396) @​HofmeisterAn
  • docs(Cassandra): Add example (#​1382) @​gavindekock

🧹 Housekeeping

  • fix(Pulsar): Set memory limits (#​1420) @​HofmeisterAn
  • chore: Add wrapper module for Google Cloud modules (#​1411) @​digital88
  • chore: Use Docker Compose to host documentation locally (#​1410) @​digital88
  • feat(EventHubs, ServiceBus): Replace wait strategy with HTTP health check (#​1398) @​scrocquesel-ml150

4.3.0

What's Changed

Thank you to all the contributors 🙌.

🚀 Features

  • feat: Add Apache Cassandra module (#​1367) @​gavindekock
  • feat(Oracle): Add support for WithDatabase(string) for Oracle 18 and onwards (#​1321) @​0xced
  • feat: Add EventHubs module (#​1373) @​HofmeisterAn
  • feat: Add Db2 module (#​1237) @​kevin0x90

🐛 Bug Fixes

  • fix(MongoDb): Evaluate replica set status in wait strategy (#​1369) @​HofmeisterAn

🧹 Housekeeping

  • chore: Update examples implementations (#​1379) @​HofmeisterAn
  • chore: Remove SharedContainerInstance and use ContainerFixture instead (#​1378) @​0xced
  • chore: Remove code smells and bump dependencies (#​1374) @​HofmeisterAn
  • chore: Add support for macOS in Testcontainers.Db2.Tests (#​1371) @​0xced
  • chore: Add WithAcceptLicenseAgreement(bool) to container builder (#​1370) @​HofmeisterAn
  • chore: Set PackageLicenseExpression property to MIT (#​1368) @​ax-meyer

4.2.0

What's Changed

Thanks for all the contributions. Great first release of the year ❤️.

🚀 Features

  • feat: Add SFTP module (#​1362) @​wim07101993
  • feat(ServiceBus): Add support to use existing MSSQL container instances (#​1335) @​lgcmotta
  • feat: Add Weaviate module (#​1356) @​roji
  • fix(Pulsar): Support Apache Pulsar 4 (#​1355) @​entvex
  • feat: Add network support to the Kafka container (#​1316) @​SebastienDegodez
  • feat: Add pausing and unpausing container (#​1315) @​stefannikolei
  • feat: Add NAT driver network configuration (#​1328) @​HofmeisterAn

🐛 Bug Fixes

  • fix(Redpanda): Add missing command-line arguments to the startup script (smp, memory) (#​1364) @​RobotechUSA
  • chore: Remove binding of ports to IPv4 only (#​1363) @​daviian
  • feat: Add network support to the Kafka container (#​1316) @​SebastienDegodez
  • fix: Load PKCS#​12 correctly for mTLS on Windows in .NET 9 (#​1320) @​jvmdc

🧹 Housekeeping

  • fix(Redpanda): Add missing command-line arguments to the startup script (smp, memory) (#​1364) @​RobotechUSA
  • chore: Remove binding of ports to IPv4 only (#​1363) @​daviian
  • chore: Algin module configurations (#​1357) @​HofmeisterAn
  • fix: Make Testcontainers.XunitV3 publishable (#​1317) @​0xced

4.1.0

What's Changed

This is likely the last release for this year, unless urgent fixes become necessary.

I want to mention a change introduced in the last major release, where we refactored the IImage interface. As part of this update, we removed obsolete properties and overloaded constructors. If you previously used an overload other than DockerImage(string), please ensure you pass the correct values to the constructor.

Additionally, we replaced Docker.DotNet with our own fork to keep the Docker Engine API up to date. Our goal is to improve reliability and performance while offering a more developer-friendly and convenient client. If you depend on a Docker client for .NET, we encourage you to contribute to this project ❤️.

On a personal note, I wish everyone a peaceful and lovely holiday season. Take this time to rest, connect with loved ones, and recharge for the new year. Take care.

🚀 Features

  • feat: Add Azure Service Bus module (#​1309) @​HofmeisterAn
  • feat: Set ryuk.container.privileged default value to true (#​1313) @​HofmeisterAn
  • feat: Remove net6.0 and add net9.0 TFM (#​1311) @​HofmeisterAn
  • feat: Introduce a new Testcontainers.Xunit package (#​1165) @​0xced

🐛 Bug Fixes

  • fix: Postpone exception in DbContainerFixture to match the behavior of ContainerFixture (#​1310) @​0xced
  • fix: Do not pre-pull scratch image (#​1304) @​HofmeisterAn
  • fix: Add HTTP wait strategy to prevent race-condition in WaitUntilHttpRequestIsSucceededTest (#​1299) @​HofmeisterAn
  • fix: Add HTTP wait strategy to prevent race-condition in TarOutputMemoryStreamTest (#​1297) @​HofmeisterAn
  • fix: Prepend Docker Hub namespace to repository (#​1287) @​HofmeisterAn

📖 Documentation

  • docs: Add low level API access (#​1300) @​HofmeisterAn

🧹 Housekeeping

  • feat: Add Respawn example (#​1307) @​HofmeisterAn
  • chore: Add test to ensure that all test projects are configured for CI (#​1305) @​0xced
  • chore: Run each test project on a separate runner (#​1295) @​HofmeisterAn
  • chore: Replace Docker.DotNet with the Testcontainers organization's build (#​1292) @​HofmeisterAn

4.0.0

What's Changed

Thanks so much for all the effort you put into this release 🙌. We are continuing to align Testcontainers for .NET with other language implementations and working on improving the domain-specific language.

We have updated the IImage interface to follow the domain-specific language with the correct property names. The table below shows the changes. We tried to make the transition as smooth as possible, but be aware that relying on the Repository property might cause issues since it now resolves a different value than before. We have kept the old properties, marked them as obsolete, and provided guidance on how to migrate.

Actual Expected (New)
Registry - myregistryhost:5000
Repository myregistryhost:5000/fedora fedora/httpd
Name httpd -
Tag version1.0 version1.0
Digest - sha256:37a3b014d320...
GetHostname() myregistryhost:5000 myregistryhost:5000

⚠️ Breaking Changes

  • fix: Bump MSSQL image version, remove Azure SQL Edge and Papercut module (#​1265) @​HofmeisterAn
  • feat: Align IImage properties with Docker DSL (#​1256) @​HofmeisterAn

🚀 Features

  • feat: Use exec to replace current shell with the Kafka process (as ENTRYPOINT) (#​1282) @​jasoncouture
  • feat: Add getter for Azurite blob, queue and table endpoint (#​1278) @​pregress
  • feat: Reintroduce Papercut module (#​1268) @​TechLiam
  • feat: Add Neo4j Enterprise Edition support (WithEnterpriseEdition(bool)) (#​1269) @​Sossenbinder
  • feat: Support digest in IImage, DockerImage and in the WithImage(string) implementation (#​1249) @​Kielek
  • feat: Align IImage properties with Docker DSL (#​1256) @​HofmeisterAn
  • feat: Change visibility of AccountName and AccountKey to public, move to AzuriteBuilder (#​1258) @​mikecole
  • feat: Get Docker endpoint from Docker context (#​1235) @​0xced

🐛 Bug Fixes

  • fix: Bump MSSQL image version, remove Azure SQL Edge and Papercut module (#​1265) @​HofmeisterAn
  • fix: Throw exception if Docker resource does not exist instead of silently ignoring it (#​1254) @​0xced

🧹 Housekeeping

  • fix: Do not run reusable resource tests in parallel (#​1267) @​HofmeisterAn

3.10.0

Hey everyone, just wanted to say a huge thanks to all of you who helped with this version — whether through contributions, reporting issues, or discussions. I've been very busy lately, and your support has been a huge help. I really appreciate it!

What's Changed

🚀 Features

  • feat: Add MongoDB replica set support (#​1196) @​artiomchi
  • feat: Detect CSharp, FSharp and Visual Basic projects (#​1234) @​HofmeisterAn
  • feat: Improve parsing of Docker image tag version MatchVersion(Predicate<Version>) (#​1231) @​0xced
  • feat: Log Docker daemon labels if present (#​1226) @​eddumelendez

🐛 Bug Fixes

  • fix: Get sqlcmd utility file path from container instead of const file path (#​1221) @​outofrange-consulting
  • fix: Add Keycloak health port 9000 starting from major version 25 (#​1213) @​paulomorgado
  • fix: Allow specifying the protocol (TCP, UDP, SCTP) to resolve the public assigned host port (#​1219) @​wolfman42
  • fix: Trim relative path indicators from Dockerfile path (#​1203) @​HofmeisterAn

📖 Documentation

  • chore: Replace codeinclude with snippets (#​1251) @​HofmeisterAn
  • docs: Use codeinclude in module examples (#​1245) @​HofmeisterAn

🧹 Housekeeping

3.9.0

Thank you to everyone whose contributions made this release possible.

What's Changed

⚠️ Breaking Changes

The UntilOperationIsSucceeded(Func<bool>, int, Action<IWaitStrategy>) wait strategy is obsolete. Instead of this wait strategy, use any other wait strategy that matches your use case and configure the retry behavior accordingly (wait strategy options).

Using reuse together with the container builder method WithName(string) will generate a new reuse hash the first time you use the configuration. The container name was not included in calculating the reuse hash previously.

  • feat: Add wait strategy options (#​1168) @​HofmeisterAn
  • feat: Include the container name in the reuse hash (#​1162) @​0xced

🚀 Features

  • feat: Add Apache Pulsar module (#​1103) @​entvex
  • feat: Add custom configuration for retries, interval and timeout (#​1169) @​HofmeisterAn
  • feat: Add wait strategy options (#​1168) @​HofmeisterAn
  • feat: Include the container name in the reuse hash (#​1162) @​0xced

🐛 Bug Fixes

  • fix: Add default file permission (755 for image build) (#​1176) @​HofmeisterAn
  • fix(MySql): Create an empty /var/lib/mysql-files directory to prevent older versions from failing to start (#​1144) @​0xced

📖 Documentation

  • docs: Add reading file from a container (#​1151) @​HofmeisterAn

🧹 Housekeeping

  • chore: Remove PulsarContainer.CreateAuthenticationTokenAsync(TimeSpan) default arg (#​1195) @​entvex
  • chore : Do not block async context on acquire lock (#​1188) @​HofmeisterAn
  • chore: Prevent ReusableResourceTest from leaking resources (#​1164) @​0xced
  • refactor: Replace Azure SQL Edge with PostgreSQL (#​1156) @​HofmeisterAn
  • chore: Remove obsolete members (#​1146) @​HofmeisterAn

📦 Dependency Updates

  • chore: Bump BouncyCastle.Cryptography (#​1179) @​marco-carvalho
  • chore: Use new sshd:1.2.0 image (#​1160) @​mdelapenya

3.8.0

Thank you very much to all contributors once again. This version contains really great features and important fixes. Awesome increment 🙏.

What's Changed

⚠️ Breaking Changes

If you have overwritten the default logger previously (setting TestcontainersSettings.Logger), please be aware that each builder now offers a dedicated API to configure the actual logger. This has several advantages; among others, it integrates very nicely into xUnit.net's scoped loggers.

  • feat: Add WithLogger(ILogger) builder API (#​1100) @​0xced

🚀 Features

  • feat: Use built-in PEM certificate import on .NET 6 and onwards (#​1139) @​0xced
  • feat: Add WithLogger(ILogger) builder API (#​1100) @​0xced
  • feat: Add support for the target frameworks net6.0 and net8.0 (#​1133) @​HofmeisterAn
  • feat: Add Milvus module (#​1131) @​roji
  • feat: Embed symbols and enable continuous integration builds (deterministic source paths) (#​1129) @​tom-englert
  • feat: Add remote container registry identity token support (#​1124) @​HofmeisterAn
  • feat: Add URL-based resource mapping container builder API (#​1118) @​0xced
  • feat: Add CockroachDB module (#​1077) @​rafaumlemos
  • feat: Add reuse support (#​1051) @​david-szabo97

🐛 Bug Fixes

  • fix: Prevent a NullReferenceException when pulling uncached base images to build an image (#​1126) @​tom-englert
  • fix: Prevent .dockerignore entry from matching everything if it ends with globstart (#​1122) @​HofmeisterAn
  • fix: Consider the timestamp in the log message wait strategy (read the correct log message chunk) (#​1110) @​HofmeisterAn
  • fix(CosmosDb): SSL connection could not be established (#​1109) @​WakaToa

🧹 Housekeeping

  • chore: Ensure that stderr is empty after executing scripts (#​1116) @​0xced
  • chore: Use the pg_isready command to assess whether PostgreSQL is ready or not (#​1111) @​0xced
  • chore: Switch to the SDK's included Central Package Management (#​1106) @​HofmeisterAn
  • chore: Use relative ProjectReference paths instead of $(SolutionDir) (#​1094) @​0xced
  • chore: Update xUnit.net (#​1087) @​HofmeisterAn

📦 Dependency Updates

  • chore(deps): Bump Microsoft.Data.SqlClient from 5.1.0 to 5.1.3 in /tests/Testcontainers.SqlEdge.Tests (#​1088) @​dependabot
  • chore(deps): Bump Microsoft.Data.SqlClient from 5.1.0 to 5.1.3 in /tests/Testcontainers.MsSql.Tests (#​1089) @​dependabot

3.7.0

Happy New Year and a massive thank you to all the contributors who made the new version of Testcontainers for .NET possible 🙌!

What's Changed

🚀 Features

  • feat: Add Firebird SQL module (#​1073) @​park-jasper
  • feat(Azurite): Add in-memory support (#​1063) @​Xzelsius
  • feat: Add ArangoDB module (#​1058) @​ShirAvneri
  • feat: Add ActiveMQ Artemis module (#​1055) @​ShirAvneri
  • feat: Add Bigtable module (#​1046) @​peroyhav
  • feat: Add BigQuery module (#​1034) @​dejandjenic
  • feat: Add JanusGraph module (#​837) @​rngcntr
  • feat: Add Papercut module (#​1044) @​TechLiam
  • feat: Improve tar stream logging (copy files to container) (#​1050) @​HofmeisterAn

🐛 Bug Fixes

  • fix: Retry configuring Couchbase on HttpIOException (#​1064) @​mgroves

📖 Documentation

  • docs: Add ASP.NET integration test example (#​1061) @​HofmeisterAn

🧹 Housekeeping

  • chore: Update Ryuk image from version 0.5.1 to 0.6.0 (#​1084) @​HofmeisterAn
  • chore: Improve the Base64Provider resilience to malformed configuration files (#​1081) @​0xced
  • chore: Invert #if NETSTANDARD* conditional compilation conditions (#​1079) @​0xced
  • chore: Rename the file CouchDbContainerTest.cs to CouchbaseContainerTest.cs (#​1067) @​mgroves
  • chore: Replace custom wait strategy with default strategies (#​1059) @​ShirAvneri
  • chore: Remove Microsoft.SourceLink.GitHub (#​1057) @​HofmeisterAn
  • chore: Update .NET SDK to version 8 (LTS) (#​1054) @​HofmeisterAn

Commits viewable in compare view.

Updated Testcontainers.RabbitMq from 3.6.0 to 4.7.0.

Release notes

Sourced from Testcontainers.RabbitMq's releases.

4.7.0

What's Changed

This release doesn't introduce breaking changes to the public API, but it isn't binary compatible due to necessary internal changes. Make sure to update all related packages (Testcontainers modules) to the same version. See more details here. Thanks to all contributors 👏.

⚠️ Breaking Changes

  • feat(Kafka): Add KRaft support (#​1353) @​SukharevAndrey
  • feat: Add ability to override enumerable builder values (#​1506) @​HofmeisterAn

🚀 Features

  • feat: Add wait strategy to check external (TCP) port availability (#​1495) @​WhiteTomX
  • feat(Kafka): Add KRaft support (#​1353) @​SukharevAndrey
  • feat: Relax Base64 auth provider and ignore path segments in Docker registry URLs (#​1516) @​HofmeisterAn
  • feat: Add ability to override enumerable builder values (#​1506) @​HofmeisterAn
  • feat(Elasticsearch): Return HTTP connection string if security is disabled (#​1494) @​HofmeisterAn
  • fix: Add tooling to inherit XML docs (#​1493) @​HofmeisterAn
  • feat: Resolve .slnx (solution) file in common directory paths (#​1492) @​alexander-jesner-AP
  • feat: Support getting all mapped ports (#​1485) @​HofmeisterAn
  • feat: Add named pipe connection timeout custom configuration (#​1480) @​HofmeisterAn

🐛 Bug Fixes

  • feat(Kafka): Add KRaft support (#​1353) @​SukharevAndrey
  • fix: Send valid HTTP test responses (#​1505) @​HofmeisterAn
  • fix: Use null-conditional operator to access FinishedAt (#​1499) @​HofmeisterAn
  • fix: Remove timeout that kills PID 1 when stopping a container (#​1481) @​HofmeisterAn
  • fix(Pulsar): Wait until the consumer becomes connected (#​1467) @​HofmeisterAn
  • fix(ServiceBus): Remove container lifecycle overrides (#​1465) @​HofmeisterAn

📖 Documentation

  • docs: Explain how to substitute the Docker Hub registry (#​1503) @​HofmeisterAn
  • docs: Extend example copying files to a container (#​1487) @​cimnine

🧹 Housekeeping

  • chore: Change Kafka vendor configuration from class to interface (#​1519) @​HofmeisterAn
  • chore: Bump Docker.DotNet version to 3.128.5 (#​1511) @​HofmeisterAn
  • chore: Build a single project instead of the whole solution (#​1502) @​HofmeisterAn

4.6.0

What's Changed

This is a patch release (but the minor version was already set). It fixes a bug in our Docker.DotNet fork where a wrong HTTP Connection header break Podman and possibly other environments. Shipped a quick fix. Thanks again to @​ahaeber and @​victor-lambret for the help.

🐛 Bug Fixes

  • chore: Bump Docker.DotNet version to 3.128.3 (#​1462) @​HofmeisterAn

🧹 Housekeeping

  • chore: Bump Docker.DotNet version to 3.128.3 (#​1462) @​HofmeisterAn

4.5.0

What's Changed

Big thanks to everyone who contributed to this release 🤜🤛.

🚀 Features

  • feat: Add OpenSearch module (#​1395) @​digital88
  • feat: Add Typesense module (#​1446) @​brainded
  • feat: Add Task<ExecResult> extension method ThrowOnFailure (#​1448) @​HofmeisterAn
  • feat: Throw DockerUnavailableException when Docker is not available (#​1308) @​0xced
  • feat: Improve error reporting when loading the Docker configuration file (#​1263) @​0xced
  • feat: Add a wait strategy that waits until the ADO.NET database is available (#​1401) @​0xced
  • feat: Add Ollama module (#​1099) @​frankhaugen
  • feat: Allow canceling container start in xUnit.net v3 fixtures (#​1431) @​TheConstructor
  • fix(EventHubs): Support default consumer group name (#​1432) @​scrocquesel-ml150
  • feat: Add Lowkey Vault module (#​1344) @​Xor-el
  • feat(ServiceBus): Add builder API to upload config file (#​1424) @​chasewallis

🐛 Bug Fixes

  • fix: Set container created, started, stopped time from inspect response (#​1455) @​HofmeisterAn
  • fix(EventHubs): Change predicate that it does not always evaluate to true (#​1433) @​HofmeisterAn
  • fix(EventHubs): Support default consumer group name (#​1432) @​scrocquesel-ml150

📖 Documentation

  • docs(ClickHouse): Add example (#​1421) @​digital88
  • docs: Mention the xUnit.net v3 module (package) (#​1442) @​TheConstructor

🧹 Housekeeping

  • chore: Add ExecResult serializable test data (#​1456) @​HofmeisterAn
  • chore: Remove Sonar findings (#​1450) @​HofmeisterAn
  • chore: Replace Cake .NET Tool with Cake Frosting (#​1437) @​0xced
  • chore: Update test-framework to xUnit.net v3 (#​1441) @​TheConstructor
  • chore: Bump Docker.DotNet version to 3.128.1 (#​1443) @​HofmeisterAn
  • chore: Add xUnit.net v3 tests (#​1430) @​TheConstructor
  • chore: Bump CI .NET SDK and Cake version (#​1434) @​HofmeisterAn

4.4.0

What's Changed

Time for a new release! Big thanks to everyone who helped out with this one. It's got some awesome new features and fixes 😎. Seriously, I can't thank you enough. This wouldn't be possible without your ongoing support 🙏.

🚀 Features

  • feat: Add Socat container implementation (#​1416) @​eddumelendez
  • feat(Keycloak): Support admin bootstrapping for version 26 onwards (#​1400) @​paulomorgado
  • feat: Add Qdrant module (#​1149) @​russcam
  • feat(EventHubs, ServiceBus): Replace wait strategy with HTTP health check (#​1398) @​scrocquesel-ml150
  • fix: Reflect Unix file mode when building tarball from .NET 7 onwards (#​1397) @​kfarnung

🐛 Bug Fixes

  • fix(Pulsar): Set memory limits (#​1420) @​HofmeisterAn
  • fix: Add Docker Hub image name prefix to image builder API WithName(IImage) (#​1413) @​HofmeisterAn
  • fix: Reflect Unix file mode when building tarball from .NET 7 onwards (#​1397) @​kfarnung
  • fix: Retrieve logs since CreatedTime for UntilMessageIsLogged wait strategy (#​1384) @​0xced

📖 Documentation

  • docs: Bump testcontainers/helloworld image in docs to version 1.2.0 (#​1419) @​VishnuJin
  • docs(ActiveMq): Add example (#​1415) @​digital88
  • docs: Add binding redirects doc for .NET framework (#​1414) @​HofmeisterAn
  • docs: Add Bitbucket Pipelines configuration (#​1402) @​boeckie-xenopz
  • docs(EventHubs, ServiceBus): Add example (#​1396) @​HofmeisterAn
  • docs(Cassandra): Add example (#​1382) @​gavindekock

🧹 Housekeeping

  • fix(Pulsar): Set memory limits (#​1420) @​HofmeisterAn
  • chore: Add wrapper module for Google Cloud modules (#​1411) @​digital88
  • chore: Use Docker Compose to host documentation locally (#​1410) @​digital88
  • feat(EventHubs, ServiceBus): Replace wait strategy with HTTP health check (#​1398) @​scrocquesel-ml150

4.3.0

What's Changed

Thank you to all the contributors 🙌.

🚀 Features

  • feat: Add Apache Cassandra module (#​1367) @​gavindekock
  • feat(Oracle): Add support for WithDatabase(string) for Oracle 18 and onwards (#​1321) @​0xced
  • feat: Add EventHubs module (#​1373) @​HofmeisterAn
  • feat: Add Db2 module (#​1237) @​kevin0x90

🐛 Bug Fixes

  • fix(MongoDb): Evaluate replica set status in wait strategy (#​1369) @​HofmeisterAn

🧹 Housekeeping

  • chore: Update examples implementations (#​1379) @​HofmeisterAn
  • chore: Remove SharedContainerInstance and use ContainerFixture instead (#​1378) @​0xced
  • chore: Remove code smells and bump dependencies (#​1374) @​HofmeisterAn
  • chore: Add support for macOS in Testcontainers.Db2.Tests (#​1371) @​0xced
  • chore: Add WithAcceptLicenseAgreement(bool) to container builder (#​1370) @​HofmeisterAn
  • chore: Set PackageLicenseExpression property to MIT (#​1368) @​ax-meyer

4.2.0

What's Changed

Thanks for all the contributions. Great first release of the year ❤️.

🚀 Features

  • feat: Add SFTP module (#​1362) @​wim07101993
  • feat(ServiceBus): Add support to use existing MSSQL container instances (#​1335) @​lgcmotta
  • feat: Add Weaviate module (#​1356) @​roji
  • fix(Pulsar): Support Apache Pulsar 4 (#​1355) @​entvex
  • feat: Add network support to the Kafka container (#​1316) @​SebastienDegodez
  • feat: Add pausing and unpausing container (#​1315) @​stefannikolei
  • feat: Add NAT driver network configuration (#​1328) @​HofmeisterAn

🐛 Bug Fixes

  • fix(Redpanda): Add missing command-line arguments to the startup script (smp, memory) (#​1364) @​RobotechUSA
  • chore: Remove binding of ports to IPv4 only (#​1363) @​daviian
  • feat: Add network support to the Kafka container (#​1316) @​SebastienDegodez
  • fix: Load PKCS#​12 correctly for mTLS on Windows in .NET 9 (#​1320) @​jvmdc

🧹 Housekeeping

  • fix(Redpanda): Add missing command-line arguments to the startup script (smp, memory) (#​1364) @​RobotechUSA
  • chore: Remove binding of ports to IPv4 only (#​1363) @​daviian
  • chore: Algin module configurations (#​1357) @​HofmeisterAn
  • fix: Make Testcontainers.XunitV3 publishable (#​1317) @​0xced

4.1.0

What's Changed

This is likely the last release for this year, unless urgent fixes become necessary.

I want to mention a change introduced in the last major release, where we refactored the IImage interface. As part of this update, we removed obsolete properties and overloaded constructors. If you previously used an overload other than DockerImage(string), please ensure you pass the correct values to the constructor.

Additionally, we replaced Docker.DotNet with our own fork to keep the Docker Engine API up to date. Our goal is to improve reliability and performance while offering a more developer-friendly and convenient client. If you depend on a Docker client for .NET, we encourage you to contribute to this project ❤️.

On a personal note, I wish everyone a peaceful and lovely holiday season. Take this time to rest, connect with loved ones, and recharge for the new year. Take care.

🚀 Features

  • feat: Add Azure Service Bus module (#​1309) @​HofmeisterAn
  • feat: Set ryuk.container.privileged default value to true (#​1313) @​HofmeisterAn
  • feat: Remove net6.0 and add net9.0 TFM (#​1311) @​HofmeisterAn
  • feat: Introduce a new Testcontainers.Xunit package (#​1165) @​0xced

🐛 Bug Fixes

  • fix: Postpone exception in DbContainerFixture to match the behavior of ContainerFixture (#​1310) @​0xced
  • fix: Do not pre-pull scratch image (#​1304) @​HofmeisterAn
  • fix: Add HTTP wait strategy to prevent race-condition in WaitUntilHttpRequestIsSucceededTest (#​1299) @​HofmeisterAn
  • fix: Add HTTP wait strategy to prevent race-condition in TarOutputMemoryStreamTest (#​1297) @​HofmeisterAn
  • fix: Prepend Docker Hub namespace to repository (#​1287) @​HofmeisterAn

📖 Documentation

  • docs: Add low level API access (#​1300) @​HofmeisterAn

🧹 Housekeeping

  • feat: Add Respawn example (#​1307) @​HofmeisterAn
  • chore: Add test to ensure that all test projects are configured for CI (#​1305) @​0xced
  • chore: Run each test project on a separate runner (#​1295) @​HofmeisterAn
  • chore: Replace Docker.DotNet with the Testcontainers organization's build (#​1292) @​HofmeisterAn

4.0.0

What's Changed

Thanks so much for all the effort you put into this release 🙌. We are continuing to align Testcontainers for .NET with other language implementations and working on improving the domain-specific language.

We have updated the IImage interface to follow the domain-specific language with the correct property names. The table below shows the changes. We tried to make the transition as smooth as possible, but be aware that relying on the Repository property might cause issues since it now resolves a different value than before. We have kept the old properties, marked them as obsolete, and provided guidance on how to migrate.

Actual Expected (New)
Registry - myregistryhost:5000
Repository myregistryhost:5000/fedora fedora/httpd
Name httpd -
Tag version1.0 version1.0
Digest - sha256:37a3b014d320...
GetHostname() myregistryhost:5000 myregistryhost:5000

⚠️ Breaking Changes

  • fix: Bump MSSQL image version, remove Azure SQL Edge and Papercut module (#​1265) @​HofmeisterAn
  • feat: Align IImage properties with Docker DSL (#​1256) @​HofmeisterAn

🚀 Features

  • feat: Use exec to replace current shell with the Kafka process (as ENTRYPOINT) (#​1282) @​jasoncouture
  • feat: Add getter for Azurite blob, queue and table endpoint (#​1278) @​pregress
  • feat: Reintroduce Papercut module (#​1268) @​TechLiam
  • feat: Add Neo4j Enterprise Edition support (WithEnterpriseEdition(bool)) (#​1269) @​Sossenbinder
  • feat: Support digest in IImage, DockerImage and in the WithImage(string) implementation (#​1249) @​Kielek
  • feat: Align IImage properties with Docker DSL (#​1256) @​HofmeisterAn
  • feat: Change visibility of AccountName and AccountKey to public, move to AzuriteBuilder (#​1258) @​mikecole
  • feat: Get Docker endpoint from Docker context (#​1235) @​0xced

🐛 Bug Fixes

  • fix: Bump MSSQL image version, remove Azure SQL Edge and Papercut module (#​1265) @​HofmeisterAn
  • fix: Throw exception if Docker resource does not exist instead of silently ignoring it (#​1254) @​0xced

🧹 Housekeeping

  • fix: Do not run reusable resource tests in parallel (#​1267) @​HofmeisterAn

3.10.0

Hey everyone, just wanted to say a huge thanks to all of you who helped with this version — whether through contributions, reporting issues, or discussions. I've been very busy lately, and your support has been a huge help. I really appreciate it!

What's Changed

🚀 Features

  • feat: Add MongoDB replica set support (#​1196) @​artiomchi
  • feat: Detect CSharp, FSharp and Visual Basic projects (#​1234) @​HofmeisterAn
  • feat: Improve parsing of Docker image tag version MatchVersion(Predicate<Version>) (#​1231) @​0xced
  • feat: Log Docker daemon labels if present (#​1226) @​eddumelendez

🐛 Bug Fixes

  • fix: Get sqlcmd utility file path from container instead of const file path (#​1221) @​outofrange-consulting
  • fix: Add Keycloak health port 9000 starting from major version 25 (#​1213) @​paulomorgado
  • fix: Allow specifying the protocol (TCP, UDP, SCTP) to resolve the public assigned host port (#​1219) @​wolfman42
  • fix: Trim relative path indicators from Dockerfile path (#​1203) @​HofmeisterAn

📖 Documentation

  • chore: Replace codeinclude with snippets (#​1251) @​HofmeisterAn
  • docs: Use codeinclude in module examples (#​1245) @​HofmeisterAn

🧹 Housekeeping

3.9.0

Thank you to everyone whose contributions made this release possible.

What's Changed

⚠️ Breaking Changes

The UntilOperationIsSucceeded(Func<bool>, int, Action<IWaitStrategy>) wait strategy is obsolete. Instead of this wait strategy, use any other wait strategy that matches your use case and configure the retry behavior accordingly (wait strategy options).

Using reuse together with the container builder method WithName(string) will generate a new reuse hash the first time you use the configuration. The container name was not included in calculating the reuse hash previously.

  • feat: Add wait strategy options (#​1168) @​HofmeisterAn
  • feat: Include the container name in the reuse hash (#​1162) @​0xced

🚀 Features

  • feat: Add Apache Pulsar module (#​1103) @​entvex
  • feat: Add custom configuration for retries, interval and timeout (#​1169) @​HofmeisterAn
  • feat: Add wait strategy options (#​1168) @​HofmeisterAn
  • feat: Include the container name in the reuse hash (#​1162) @​0xced

🐛 Bug Fixes

  • fix: Add default file permission (755 for image build) (#​1176) @​HofmeisterAn
  • fix(MySql): Create an empty /var/lib/mysql-files directory to prevent older versions from failing to start (#​1144) @​0xced

📖 Documentation

  • docs: Add reading file from a container (#​1151) @​HofmeisterAn

🧹 Housekeeping

  • chore: Remove PulsarContainer.CreateAuthenticationTokenAsync(TimeSpan) default arg (#​1195) @​entvex
  • chore : Do not block async context on acquire lock (#​1188) @​HofmeisterAn
  • chore: Prevent ReusableResourceTest from leaking resources (#​1164) @​0xced
  • refactor: Replace Azure SQL Edge with PostgreSQL (#​1156) @​HofmeisterAn
  • chore: Remove obsolete members (#​1146) @​HofmeisterAn

📦 Dependency Updates

  • chore: Bump BouncyCastle.Cryptography (#​1179) @​marco-carvalho
  • chore: Use new sshd:1.2.0 image (#​1160) @​mdelapenya

3.8.0

Thank you very much to all contributors once again. This version contains really great features and important fixes. Awesome increment 🙏.

What's Changed

⚠️ Breaking Changes

If you have overwritten the default logger previously (setting TestcontainersSettings.Logger), please be aware that each builder now offers a dedicated API to configure the actual logger. This has several advantages; among others, it integrates very nicely into xUnit.net's scoped loggers.

  • feat: Add WithLogger(ILogger) builder API (#​1100) @​0xced

🚀 Features

  • feat: Use built-in PEM certificate import on .NET 6 and onwards (#​1139) @​0xced
  • feat: Add WithLogger(ILogger) builder API (#​1100) @​0xced
  • feat: Add support for the target frameworks net6.0 and net8.0 (#​1133) @​HofmeisterAn
  • feat: Add Milvus module (#​1131) @​roji
  • feat: Embed symbols and enable continuous integration builds (deterministic source paths) (#​1129) @​tom-englert
  • feat: Add remote container registry identity token support (#​1124) @​HofmeisterAn
  • feat: Add URL-based resource mapping container builder API (#​1118) @​0xced
  • feat: Add CockroachDB module (#​1077) @​rafaumlemos
  • feat: Add reuse support (#​1051) @​david-szabo97

🐛 Bug Fixes

  • fix: Prevent a NullReferenceException when pulling uncached base images to build an image (#​1126) @​tom-englert
  • fix: Prevent .dockerignore entry from matching everything if it ends with globstart (#​1122) @​HofmeisterAn
  • fix: Consider the timestamp in the log message wait strategy (read the correct log message chunk) (#​1110) @​HofmeisterAn
  • fix(CosmosDb): SSL connection could not be established (#​1109) @​WakaToa

🧹 Housekeeping

  • chore: Ensure that stderr is empty after executing scripts (#​1116) @​0xced
  • chore: Use the pg_isready command to assess whether PostgreSQL is ready or not (#​1111) @​0xced
  • chore: Switch to the SDK's included Central Package Management (#​1106) @​HofmeisterAn
  • chore: Use relative ProjectReference paths instead of $(SolutionDir) (#​1094) @​0xced
  • chore: Update xUnit.net (#​1087) @​HofmeisterAn

📦 Dependency Updates

  • chore(deps): Bump Microsoft.Data.SqlClient from 5.1.0 to 5.1.3 in /tests/Testcontainers.SqlEdge.Tests (#​1088) @​dependabot
  • chore(deps): Bump Microsoft.Data.SqlClient from 5.1.0 to 5.1.3 in /tests/Testcontainers.MsSql.Tests (#​1089) @​dependabot

3.7.0

Happy New Year and a massive thank you to all the contributors who made the new version of Testcontainers for .NET possible 🙌!

What's Changed

🚀 Features

  • feat: Add Firebird SQL module (#​1073) @​park-jasper
  • feat(Azurite): Add in-memory support (#​1063) @​Xzelsius
  • feat: Add ArangoDB module (#​1058) @​ShirAvneri
  • feat: Add ActiveMQ Artemis module (#​1055) @​ShirAvneri
  • feat: Add Bigtable module (#​1046) @​peroyhav
  • feat: Add BigQuery module (#​1034) @​dejandjenic
  • feat: Add JanusGraph module (#​837) @​rngcntr
  • feat: Add Papercut module (#​1044) @​TechLiam
  • feat: Improve tar stream logging (copy files to container) (#​1050) @​HofmeisterAn

🐛 Bug Fixes

  • fix: Retry configuring Couchbase on HttpIOException (#​1064) @​mgroves

📖 Documentation

  • docs: Add ASP.NET integration test example (#​1061) @​HofmeisterAn

🧹 Housekeeping

  • chore: Update Ryuk image from version 0.5.1 to 0.6.0 (#​1084) @​HofmeisterAn
  • chore: Improve the Base64Provider resilience to malformed configuration files (#​1081) @​0xced
  • chore: Invert #if NETSTANDARD* conditional compilation conditions (#​1079) @​0xced
  • chore: Rename the file CouchDbContainerTest.cs to CouchbaseContainerTest.cs (#​1067) @​mgroves
  • chore: Replace custom wait strategy with default strategies (#​1059) @​ShirAvneri
  • chore: Remove Microsoft.SourceLink.GitHub (#​1057) @​HofmeisterAn
  • chore: Update .NET SDK to version 8 (LTS) (#​1054) @​HofmeisterAn

Commits viewable in compare view.

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions

Bumps Testcontainers from 3.6.0 to 4.7.0
Bumps Testcontainers.PostgreSql from 3.6.0 to 4.7.0
Bumps Testcontainers.RabbitMq from 3.6.0 to 4.7.0

---
updated-dependencies:
- dependency-name: Testcontainers
  dependency-version: 4.7.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: testcontainers
- dependency-name: Testcontainers.PostgreSql
  dependency-version: 4.7.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: testcontainers
- dependency-name: Testcontainers.RabbitMq
  dependency-version: 4.7.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: testcontainers
...

Signed-off-by: dependabot[bot] <[email protected]>
@dependabot dependabot bot added .NET Pull requests that update .NET code dependencies Pull requests that update a dependency file labels Sep 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file .NET Pull requests that update .NET code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants