testcontainers
A library for integration-testing against docker containers from within Rust.
0.28.0
36M downloads/mo
#1495 most downloaded on crates.io
testcontainers/testcontainers-rs
What this package is like to depend on
Last release 17 days ago
06 Aug 2026
Ships fairly regularly
a new release about every 5 weeks
Most releases are documented
notes for 40 of 50 stable releases
1 version withdrawn
withdrawn after publishing
8 years old
51 releases · first in 2018
12 releases in the last 12 months
see the full history below
Release timeline
51 releases · Aug 2018 to Aug 2026Releases
latest 51-
0.28.006 Aug 2026Release notes
Open source →Details
Miscellaneous Tasks
- Update astral-tokio-tar from 0.6.0 to 0.6.1 (#940)
- Update parse-display requirement from 0.9.0 to 0.11.0 (#942)
- Bump testcontainers/sshd image from 1.3.0 to 1.4.0 (#952)
- Update russh requirement from 0.60.0 to 0.61.2 (#950)
- [❗] Update bollard 0.20 to 0.21 (#943)
- Update docker-compose-types requirement from 0.23 to 0.24 (#951)
Release notes
Open source →Details
Miscellaneous Tasks
- Update astral-tokio-tar from 0.6.0 to 0.6.1 (#940)
- Update parse-display requirement from 0.9.0 to 0.11.0 (#942)
- Bump testcontainers/sshd image from 1.3.0 to 1.4.0 (#952)
- Update russh requirement from 0.60.0 to 0.61.2 (#950)
- [❗] Update bollard 0.20 to 0.21 (#943)
- Update docker-compose-types requirement from 0.23 to 0.24 (#951)
-
0.27.315 Apr 2026Release notes
Open source →Details
Bug Fixes
- Pass Docker Hub credentials for images without a registry prefix (#935)
Miscellaneous Tasks
Release notes
Open source →Details
Bug Fixes
- Pass Docker Hub credentials for images without a registry prefix (#935)
Miscellaneous Tasks
-
0.27.223 Mar 2026Release notes
Open source →Release notes
Open source → -
0.27.123 Feb 2026Release notes
Open source →Details
Bug Fixes
- Pass env vars via Docker exec API instead of prepending to command (#920)
Features
- Allow people to disable the default wait behavior (#922)
Release notes
Open source →Details
Bug Fixes
- Pass env vars via Docker exec API instead of prepending to command (#920)
Features
- Allow people to disable the default wait behavior (#922)
-
0.27.006 Feb 2026Release notes
Open source →Details
Features
- Add User-Agent header 'tc-rust/' to Docker API requests (#897)
- Allow opening stdin option for container request (#904)
Miscellaneous Tasks
Release notes
Open source →Details
Features
- Add User-Agent header 'tc-rust/<version>' to Docker API requests (#897)
- Open stdin option for container request (#904)
Miscellaneous Tasks
-
0.26.405 Feb 2026 withdrawnRelease notes
Open source →Release notes
Open source →Details
Features
- Add User-Agent header 'tc-rust/<version>' to Docker API requests (#897)
Miscellaneous Tasks
-
0.26.324 Dec 2025 -
0.26.219 Dec 2025 -
0.26.119 Dec 2025Release notes
Open source →Release notes
Open source → -
0.26.001 Dec 2025Release notes
Open source →Details
Bug Fixes
- Make port_bindings consistent with docker cli when publish_all_ports = true (#885)
Features
- Support build options -
no_cache,skip_if_existsandbuildargs(#856) - Support docker-compose (#864)
- Add target options with custom mode (#878)
- Support copying from containers (#871)
Miscellaneous Tasks
Performance
Release notes
Open source →Details
Bug Fixes
- Make port_bindings consistent with docker cli when publish_all_ports = true (#885)
Features
- Support build options -
no_cache,skip_if_existsandbuildargs(#856) - Support docker-compose (#864)
- Add target options with custom mode (#878)
- Support copying from containers (#871)
Miscellaneous Tasks
Performance
-
0.25.227 Oct 2025Release notes
Open source → -
0.25.127 Oct 2025Release notes
Open source →Details
Bug Fixes
- Replace tokio-tar with astral-tokio-tar (#852)
Documentation
- Rustdoc for builder API (#820)
Features
- Use DOCKER_DEFAULT_PLATFORM env var to specify platform (#800)
- Fallback to platform linux/amd64 when image pull fails (#837)
- Add support for devices request (#832)
- Add configurable tmpfs mount sizes (#853)
- Support
http_waitfunctionallity without tls dependencies (#850) - Add container hostname support (#848)
- Expose host ports between host and containers via ssh sidecar (#846)
Miscellaneous Tasks
- Update bollard-stubs requirement from =1.48.3-rc.28.0.4 to =1.49.0-rc.28.3.3 (#828)
Refactor
- Remove bollard_stubs dependency as bollard re-exports it (#844)
Testing
- Avoid flakiness in
platformtest - Switch to testcontainers/helloworld and reduce some flakiness (#855)
-
0.25.027 Jul 2025Release notes
Open source →Details
Bug Fixes
- Make tls features optional (#806)
- Add
Sendtrait tostderr&stdoutofExecResult(#809) - Added new parse rule for correctly parsing ports without protocol specifier (#812)
Features
- Allow ready conditions customization via ImageExt (#794)
- Allow to wait for log line on either stdout or stderr (#795)
- Add
Container*::exit_code(#791) - Add
Container*::is_running(#790) - Add custom health check support for containers (#816)
- Introduce container builder api (#801)
Miscellaneous Tasks
- [❗] Update bollard to 1.19.1 (#817)
Refactor
- Testimages and tests to use builder API (#804)
-
0.24.004 May 2025Release notes
Open source →Details
Features
- Support waiting for commands exit regardless of exit code (#771)
- Add user configuration for container commands (#784)
- Add option to stop containers with a timeout (#779)
- Support
pauseandunpausecontainer (#785) - Allow
security_optandreadonly_rootfsto be configured (#787)
Miscellaneous Tasks
- Update etcetera requirement from 0.8.0 to 0.9.0 (#773)
- Update etcetera requirement from 0.9.0 to 0.10.0 (#775)
-
0.23.319 Feb 2025Release notes
Open source →Details
Bug Fixes
- Proper handling of possible stdin in logs stream (#769)
Features
- Re-export bollard
-
0.23.207 Feb 2025Release notes
Open source →Details
Documentation
- Add examples of
ImageExtusage and coverGenericImage(#747)
Features
- Add
cap_addandcap_dropsupport (#726) - Add support for user-configured labels (#756)
- Reusable containers (#757)
- Add image hook to run commands before ready (#766)
Miscellaneous Tasks
- Update thiserror requirement from 1.0.60 to 2.0.3 (#754)
- Bump the bollard dep to latest (#759)
Testing
- Deflake the test
start_containers_in_parallel(#748)
- Add examples of
-
0.23.126 Sep 2024 -
0.23.025 Sep 2024Release notes
Open source →Details
Bug Fixes
Features
Miscellaneous Tasks
- Copy-to-container interface improvements (#732)
Refactor
- Replace dirs crate with etcetera (#736)
-
0.22.030 Aug 2024Release notes
Open source →Details
Bug Fixes
- [❗] Docker socket detection on unix (#721)
Features
- Add
working_dirtoContainerRequest,ImageExt(#724)
Miscellaneous Tasks
- Added
#![forbid(unsafe_code)]to the library (#722)
-
0.21.105 Aug 2024 -
0.21.030 Jul 2024Release notes
Open source →Details
Bug Fixes
- Don't assume docker host is a url (#709)
Miscellaneous Tasks
- Bump the bollard group across 1 directory with 2 updates (#710)
Refactor
- [❗] Put
reqwestbehindhttp_waitfeature (#705)
-
0.20.118 Jul 2024Release notes
Open source →Details
Bug Fixes
- Trim newline char from the mirrored messages (#699)
Features
- Support optional prefix for
LoggingConsumer(#698)
-
0.20.007 Jul 2024Release notes
Open source →Details
Bug Fixes
- [❗] Drop
Cloneimpl forContainerRequest(#680) - Exclude image pulling time from startup timeout (#687)
- Waiting for mutiple messages from the same log frame (#688)
- Pass correct log-source for
stderrwait strategy (#692)
Features
- Introduce log consumers (#681)
- Introduce
LoggingConsumerbased onlogcrate (#682) - [❗] Enhance
LogWaitStrategyto wait for message appearance multiple times (#683) - [❗] Introduce
ExitWaitStrategy(#684)
Miscellaneous Tasks
- Get rid of outdated variables naming (#679)
- Relax log level for log producer error (#685)
- Re-configure blocking runtime (#690)
Performance
- Avoid spawning log producer without consumers (#689)
Refactor
- Internal log processing structures (#678)
Styling
- Apply clippy suggestion (#693)
- [❗] Drop
-
0.19.028 Jun 2024Release notes
Open source →Details
Bug Fixes
- [❗] Use
rustls-tlsas default forreqwest(#672)
Documentation
- Update examples of
GenericImage::with_exposed_port(#670)
Features
- Add ability to convert
ContainerPorttou16(#664)
Miscellaneous Tasks
- Make
portsmodule public (#665)
Performance
- Use separate dropper thread for
current_threadflavor (#666)
Refactor
- Use multi-threaded runtime for blocking feature (#667)
- [❗] Use
-
0.18.015 Jun 2024Release notes
Open source →Details
Bug Fixes
- [❗] Make
DOCKER_CONFIGusage consistent with Docker CLI (#654)
Features
- [❗] Support UDP and SCTP port mappings (#655)
- Impl
From<u16>forContainerPortwith TCP default (#658) - Support HTTP wait strategy (#659)
- Allow passing
u16toPorts
Miscellaneous Tasks
- Use nightly
rustfmt(#657)
Refactor
- [❗] Get rid of associated type
ImageArgsand rename tocmd(#649) - Avoid unnecessary owned structs and boxing (#651)
- [❗] Add
ImageExttrait to avoid explicit conversion toRunnableImage(#652) - [❗] Rename
RunnableImagetoContainerRequest(#653) - [❗] Exposed and mapped ports api (#656)
- Preliminary refactoring of
waitstrategies (#661)
- [❗] Make
-
0.17.026 May 2024Release notes
Open source →Details
Bug Fixes
Features
- Impl
ErrorforWaitError(#629) - [❗] Extend
execinterface to return logs and exec code (#631) - Ability to access container logs (#633)
- [❗] Switch to fallible API (#636)
- Make container and exec logs
Sendable (#637) - Map container not found error to
eoffor container log streams (#639) - Expose follow flag for
stdoutandstderr(#640) - Add ability to read container logs into
Vec(#641) - [❗] Add container startup timeout with default of 1 minute (#643)
Miscellaneous Tasks
- Fix clippy warning without features enabled (#632)
Refactor
- Impl
-
0.16.701 May 2024Release notes
Open source →Details
Bug Fixes
get_hostforunixandnpipedocker hosts (#621)
Features
- Extend
WaitForforExecCommand(#622)
-
0.16.630 Apr 2024 -
0.16.529 Apr 2024Release notes
Open source →Details
Bug Fixes
- Correct drop of a network for sync container (#612)
- Correct default for
get_host_ip_addressin case ofunixornpipe(#613)
Miscellaneous Tasks
- Update
serde-java-propertiesto0.2.0(#614)
-
0.16.429 Apr 2024 -
0.16.327 Apr 2024 -
0.16.227 Apr 2024 -
0.16.127 Apr 2024 -
0.16.027 Apr 2024Release notes
Open source →Details
Bug Fixes
- Use the binds option instead of volumes for mounts (#581)
Documentation
- Mention a way to preserve running containers (#586)
Features
- Support for docker cli flag
--add-host(#547) - Allow to override args in a
RunnableImage(#558) - Add
nameparameter toRunnableImage(#549) - [❗] Container-centric API with refactored underlying layer (#575)
- Add ability to pull-image explicitly (#579)
Miscellaneous Tasks
- Remove
spectralfromdev-dependencies(#526) - Update reqwest requirement from 0.11.14 to 0.12.3 (#569)
- Update bollard and bollard-stubs (#574)
- Reuse workspace level configs (#568)
Refactor
- [❗] Api for mounts and volumes (#596)
Styling
-
0.15.005 Oct 2023Release notes
Open source →Added
- Added
privilegedparameter toRunnableImage - Added
shm_size(shared memory size) parameter toRunnableImage - Added logging of an error when starting a container fails
Changed
Container::execchanged to be synchronous and returnExecOutput- MSRV is now 1.63.
- Fixed
get_bridge_ip_addressnot to use outdated properties Dockertrait is declared to beSend + Sync
Removed
- Removed all pre-defined images from the library to escape unbounded maintenance work. See https://github.com/testcontainers/testcontainers-rs/issues/471 for details.
- Removed explicit support for podman. See https://github.com/testcontainers/testcontainers-rs/issues/422 for details.
- Added
-
0.14.001 Jun 2022Release notes
Open source →Added
- Added
watchdogfeature that spawns a background thread keeping track of docker containers that are started by the test suite and removes them in the case of aCTRL+Corkillof the test process. - Introduced
Container::get_host_port_ipv4,Container::get_host_port_ipv6,ContainerState::host_port_ipv4, andContainerState::host_port_ipv6to better handle automatically assigned ports. Docker may bind the same exposed container port to different host ports on0.0.0.0and::, depending on influences from the environment.
Changed
Container::get_host_portandContainerState::host_portare now deprecated in favor of the new IPv4- and IPv6-specific methods.- MSRV is now 1.60.
- Added
-
0.13.004 Apr 2022Release notes
Open source →Added
- A new client implementation that talks to the Docker daemon via HTTP.
This implementation is available as
testcontainers::clients::Httpand provides an async interface. As of now, this implementation is guarded behind theexperimentalfeature-flag and not yet guaranteed to work flawlessly. - Allow using
podmanCLI in addition todocker - The
TESTCONTAINERSenvironment variable to control what happens to containers and networks at the end of a test. The default value isremovewhich deletes all containers and networks that were used in the test. By setting the value tokeep, containers and networks will not be deleted but kept running. You will have to stop and delete those yourself eventually. - Upgrade default bitcoin-core image version to 0.21.0. This allows us to remove
-debugfor bitcoind and replace it with-startupnotify=echo .... More details on bitcoind 0.21.0 can be found here. Note: This release also removed the default wallet. expose_portfunctionality toImagetrait.Google Cloud SDKimageRabbitMQimageWaitFor::Healthcheckcontainer ready condition, which corresponds with the healthcheck status.MinIOimage
Changed
- How images express when a container is ready: Instead of implementing
wait_until_ready, images now need to implementready_conditionswhich returns a list ofWaitForinstances. - Return value of
get_host_portfromOption<u16>tou16. If the port cannot be resolved, this function will now panic. - MSRV bumped to 1.46.
- Make
Dockertraitpub(crate). This reduces the API surface of the crate which allows for fewer breaking changes in the future. All functionality fromDocker(start, stop, rm, and ports) is available on a container directly. descriptoris broken down intonameandtagwithinImagetrait.- Bump
MongoDB-image default version to5.0.6.
Removed
DYNAMODB_ADDITIONAL_SLEEP_PERIODvariable fromdynamodb_localimage. Previously, we had a fallback of 2 seconds if this variable was not defined. We now wait for 2 seconds unconditionally after the specified message has been found.- Support for the
KEEP_CONTAINERSenv variable. The functionality ofKEEP_CONTAINERS=trueis superseded byTESTCONTAINERS=keep. with_entrypointfrom theImagetrait. This functionality is not used within the library. Images that need this kind of customization can always implement it on their own type directly but there is no need to force it onto them.Image::EnvVarsandImage::Volumesassociated types. The respective functionsImage::env_varsandImage::volumesstill exist but now return a trait object that must implementIterator<Item = (&String, &String). This allows us to provide a default implementation which reduces the boilerplate in defining new images.argsandwith_argsfromImagetrait.
Fixed
- Removing a docker container did not error if failed. This was fixed by asserting the daemon's response instead of
just the status code: If a docker container was removed correctly using
rm -f -v <ID><ID> is printed on stdout. <ID> can either be the container name or its ID which is used within testcontainer-rs. - Fixed clippy warnings of camel case names containing a capitalized acronym.
- A new client implementation that talks to the Docker daemon via HTTP.
This implementation is available as
-
0.12.028 Jan 2021Release notes
Open source →Added
- Allow custom version for postgres image
- Remove
derivativedependency OrientDBimageZookeeperimage
Changed
- Move port mapping logic to
RunArgsinstead of each Image.
-
0.11.030 Sep 2020Release notes
Open source →Added
Docker::run_with_argsmethod. This allows naming a container and assigning it to a specific docker network. The docker network will be created if it doesn't exist yet. Once the client is dropped, the network will be removed again if it has previously been created. A network that already existed will not be removed.- Address-type argument to
coblox/bitcoin-coreImage. We are settingbech32as a default here. This is different from the default ofbitcoind.
Fixed
- Block the thread until containers have been successfully removed. Previously, this was done in a fire-and-forget way and hence led to containers not being removed in certain situations.
Changed
- MSRV is now 1.41.0
-
0.10.020 Aug 2020Release notes
Open source →Added
- Mongo image.
- Support for the
fallbackfeeargument for thebitcoin-coreimage. - Ability to customize the
entrypointused by the image. - Ability to start a container once stopped.
Changed
- MSRV bumped to 1.36 from 1.32.
- Change postgres image authentication POSTGRES_HOST_AUTH_METHOD rather than username and password.
- Bumped bitcoin-core default tag to 0.20.0.
-
0.9.125 Mar 2020Release notes
Open source →Added
- A changelog
- Support volumes on containers
Changed
- Breaking:
Container#get_host_portnow only accepts au16instead of au32.u16captures all possible port values.
Fixes
- Provide a default password for the postgres image. There seems to be an unfortunate breaking change in the postgres image that we need to cater for.
-
0.8.125 Sep 2019Nothing published for this version
-
0.8.017 Sep 2019Nothing published for this version
-
0.7.005 May 2019Nothing published for this version
-
0.6.028 Feb 2019Nothing published for this version
-
0.5.007 Feb 2019Nothing published for this version
-
0.4.015 Jan 2019Nothing published for this version
-
0.3.123 Oct 2018Nothing published for this version
-
0.3.003 Oct 2018Nothing published for this version
-
0.2.017 Sep 2018Nothing published for this version
-
0.1.024 Aug 2018Nothing published for this version