All notable changes to this project will be documented in this file.
- Linux/Mac: Added support for docker credential helpers so that images may be pulled from private registries. See #729, #647 and #567.
- Ensure that the
COMPOSE_FILE
environment variable is populated with all relevant compose file names when running docker-compose in local mode #755. - Fixed issue whereby specified command in MariaDB image was not being applied. (#534)
- Changed Oracle thin URL to support both Oracle 11 and 12 XE (#769)
- Ensure that full JDBC URL query string is passed to JdbcDatabaseDelegate during initscript invocation (#741; fixes #727)
- Ensure that necessary transitive dependency inclusions are applied to generated project POMs (#772; fixes #753 and #652)
- Update Apache Pulsar module to 2.0.1 #760.
- Make JdbcDatabaseContainer#getDriverClassName public #743.
- enable
copyFileToContainer
feature during container startup #742. - avoid using file mounting in KafkaContainer #775.
- Added Apache Cassandra module #776.
- Fixed JDBC URL Regex Pattern to ensure all supported Database URL's are accepted (#596)
- Filtered out TestContainer parameters (TC_*) from query string before passing to database (#345)
- Use
latest
tag as default image tag (#676)
- Allow
HttpWaitStrategy
to wait for a specific port (#703) - New module: Apache Pulsar (#713)
- Add support for defining container labels (#725)
- Use
quay.io/testcontainers/ryuk
instead ofbsideup/ryuk
(#721) - Added Couchbase module (#688)
- Enhancements and Fixes for JDBC URL usage to create Containers (#594)
- Extracted JDBC URL manipulations to a separate class -
ConnectionUrl
. - Added an overloaded method
JdbcDatabaseContainerProvider.newInstance(ConnectionUrl)
, with default implementation delegating to the existingnewInstance(tag)
method. (Relates to #566) - Added an implementation of
MySQLContainerProvider.newInstance(ConnectionUrl)
that uses Database Name, User, and Password from JDBC URL while creating new MySQL Container. (#566 for MySQL Container)
- Extracted JDBC URL manipulations to a separate class -
- Changed internal port of KafkaContainer back to 9092 (#733)
- Add support for Dockerfile based images to OracleContainer (#734)
- Read from both
/proc/net/tcp
and/proc/net/tcp6
inInternalCommandPortListeningCheck
(#750) - Added builder methods for timeouts in
JdbcDatabaseContainer
(#748) - Added an alternative experimental transport based on OkHttp. Enable it with
transport.type=okhttp
property (#710) - Framework-agnostic container & test lifecycle (#702)
- Fix for setting
ryuk.container.timeout
causes aClassCastException
(#684) - Fixed provided but shaded dependencies in modules (#693)
- Added InfluxDB module (#686)
- Added MockServer module (#696)
- Changed LocalStackContainer to extend GenericContainer (#695)
- Add support for private repositories using docker credential stores/helpers (fixes #567)
- Add support for private repositories using docker credential stores/helpers (fixes #567)
- Retry any exceptions (not just
DockerClientException
) on image pull (#662) - Fixed handling of the paths with
+
in them (#664)
- Database container images are now pinned to a specific version rather than using
latest
. The tags selected are the most recent as of the time of this change. If a JDBC URL is used with no tag specified, a WARN level log message is output, pending a future change to make tags mandatory in the JDBC URL. (#671) - Updated docker-java to 3.1.0-rc-3, enforced
org.jetbrains:annotations:15.0
. (#672)
- Fixed missing
commons-codec
dependency (#642) - Fixed
HostPortWaitStrategy
throwsNumberFormatException
when port is exposed but not mapped (#640) - Fixed log processing: multibyte unicode, linebreaks and ASCII color codes. Color codes can be turned on with
withRemoveAnsiCodes(false)
(#643) - Fixed Docker host IP detection within docker container (detect only if not explicitly set) (#648)
- Add support for private repositories using docker credential stores/helpers (PR #647, fixes #567)
- Support multiple HTTP status codes for HttpWaitStrategy (#630)
- Mark all long-living threads started by Testcontainers as daemons and group them. (#646)
- Remove noisy
DEBUG
logging of Netty packets (#646) - Updated docker-java to 3.1.0-rc-2 (#646)
- Fixed extraneous insertion of
useSSL=false
in all JDBC URL strings, even for DBs that do not understand it. Usage is now restricted to MySQL by default and can be overridden by authors ofJdbcDatabaseContainer
subclasses (#568) - Fixed
getServicePort
onDockerComposeContainer
throws NullPointerException if service instance number in not used. (#619) - Increase Ryuk's timeout and make it configurable with
ryuk.container.timeout
. (#621#635)
- Added compatibility with selenium greater than 3.X (#611)
- Abstracted and changed database init script functionality to support use of SQL-like scripts with non-JDBC connections. (#551)
- Added
JdbcDatabaseContainer(Future)
constructor. (#543) - Mark DockerMachineClientProviderStrategy as not persistable (#593)
- Added
waitingFor(String serviceName, WaitStrategy waitStrategy)
and overloadedwithExposedService()
methods toDockerComposeContainer
to allow user to defineWaitStrategy
for compose containers. (#174, #515 and (#600)) - Deprecated
WaitStrategy
and implementations in favour of classes with same names inorg.testcontainers.containers.strategy
(#600) - Added
ContainerState
interface representing the state of a started container (#600) - Added
WaitStrategyTarget
interface which is the target of the newWaitStrategy
(#600) - Breaking: Removed hard-coded
wnameless
Oracle database image name. Users should instead place a file on the classpath namedtestcontainers.properties
containingoracle.container.image=IMAGE
, where IMAGE is a suitable image name and tag/SHA hash. For information, the approach recommended by Oracle for creating an Oracle XE docker image is described here. - Added
DockerHealthcheckWaitStrategy
that is based on Docker's built-in healthcheck (#618). - Added
withLogConsumer(String serviceName, Consumer<OutputFrame> consumer)
method toDockerComposeContainer
(#605) - Added
withFixedExposedPort(int hostPort, int containerPort, InternetProtocol protocol)
method toFixedHostPortGenericContainer
andaddFixedExposedPort(int hostPort, int containerPort, InternetProtocol protocol)
toGenericContainer
(#586)
- Fixed incompatibility of Docker-Compose container with JDK9. (#562)
- Fixed retrieval of Docker host IP when running inside Docker. (#479)
- Compose is now able to pull images from private repositories. (#536)
- Fixed overriding MySQL image command. (#534)
- Fixed shading for javax.annotation.CheckForNull (#563 and testcontainers/testcontainers-scala#11).
- Added JDK9 build and tests to Travis-CI. (#562)
- Added Kafka module (#546)
- Added "Death Note" to track & kill spawned containers even if the JVM was "kill -9"ed (#545)
- Environment variables are now stored as Map instead of List (#550)
- Added
withEnv(String name, Function<Optional<String>, String> mapper)
with optional previous value (#550) - Added
withFileSystemBind
overloaded method withREAD_WRITE
file mode by default (#550) - All connections to JDBC containers (e.g. MySQL) don't use SSL anymore. (#374)
1.5.1 - 2017-12-19
- Fixed problem with case-sensitivity when checking internal port. (#524)
- Add retry logic around checkExposedPort pre-flight check for improved robustness (#513)
- Added
getDatabaseName
method to JdbcDatabaseContainer, MySQLContainer, PostgreSQLContainer (#473) - Added
VncRecordingContainer
- Network-based, attachable re-implementation ofVncRecordingSidekickContainer
(#526)
1.5.0 - 2017-12-12
- Fixed problems with using container based docker-compose on Windows (#514)
- Fixed problems with copying files on Windows (#514)
- Fixed regression in 1.4.3 when using Docker Compose on Windows (#439)
- Fixed local Docker Compose executable name resolution on Windows (#416)
- Fixed TAR composition on Windows (#444)
- Allowing
addExposedPort
to be used after ports have been specified withwithExposedPorts
(#453) - Stopping creation of temporary directory prior to creating temporary file (#443)
- Ensure that temp files are created in a temp directory (#423)
- Added
WaitAllStrategy
as a mechanism for composing multiple startupWaitStrategy
objects together - Changed
BrowserWebDriverContainer
to use improved wait strategies, to eliminate race conditions when starting VNC recording containers. This should lead to far fewer 'error' messages logged when starting up selenium containers, and less exposure to race related bugs (fixes #466).
- Make Network instances reusable (i.e. work with
@ClassRule
) (#469) - Added support for explicitly setting file mode when copying file into container (#446, #467)
- Use Visible Assertions 2.1.0 for pre-flight test output (eliminating Jansi/JNR-POSIX dependencies for lower likelihood of conflict. JNA is now used internally by Visible Assertions instead).
- Mark all links functionality as deprecated. This is pending removal in a later release. Please see #465.
Network
features should be used instead. - Added support for copying files to/from running containers (#378)
- Add
getLivenessCheckPorts
as an eventual replacement forgetLivenessCheckPort
; this allows multiple ports to be included in post-startup wait strategies. - Refactor wait strategy port checking and improve test coverage.
- Added support for customising the recording file name (#500)
- Fixed local Docker Compose executable name resolution on Windows (#416, #460)
- Fixed TAR composition on Windows (#444)
- Allowing
addExposedPort
to be used after ports have been specified withwithExposedPorts
(#453) - Stopping creation of temporary directory prior to creating temporary file (#443)
- Added
forResponsePredicate
method to HttpWaitStrategy to test response body (#441) - Changed
DockerClientProviderStrategy
to be loaded via Service Loader (#434, #435) - Made it possible to specify docker compose container in configuration (#422, #425)
- Clarified wording of pre-flight check messages (#457, #436)
- Added caching of failure to find a docker daemon, so that subsequent tests fail fast. This is likely to be a significant improvement in situations where there is no docker daemon available, dramatically reducing run time and log output when further attempts to find the docker daemon cannot succeed.
- Allowing JDBC containers' username, password and DB name to be customized (#400, #354)
1.4.2 - 2017-07-25
- Worked around incompatibility between Netty's Unix socket support and OS X 10.11. Reinstated use of TCP-Unix Socket proxy when running on OS X prior to v10.12. (Fixes #402)
- Changed to use version 2.0 of the Visible Assertions library for startup pre-flight checks. This no longer has a dependency on Jansi, and is intended to resolve a JVM crash issue apparently caused by native lib version conflicts (#395). Please note that the newer ANSI code is less mature and thus has had less testing, particularly in interesting terminal environments such as Windows. If issues are encountered, coloured assertion output may be disabled by setting the system property
visibleassertions.ansi.enabled
totrue
. - Fixed NullPointerException when calling GenericContainer#isRunning on not started container (#411)
- Removed Guava usage from
jdbc
module (#401)
1.4.1 - 2017-07-10
- Fixed Guava shading in
jdbc
module
1.4.0 - 2017-07-09
- Fixed the case when disk's size is bigger than Integer's max value (#379, #380)
- Fixed erroneous version reference used during CI testing of shaded dependencies
- Fixed leakage of Vibur and Tomcat JDBC test dependencies in
jdbc-test
andmysql
modules (#382) - Added timeout and retries for creation of
RemoteWebDriver
(#381, #373, #257) - Fixed various shading issues
- Improved removal of containers/networks when using Docker Compose, eliminating irrelevant errors during cleanup (#342, #394)
- Added support for Docker networks (#372)
- Added
getFirstMappedPort
method (#377) - Extracted Oracle XE container into a separate repository (testcontainers/testcontainers-java-module-oracle-xe)
- Added shading tests
- Updated docker-java to 3.0.12 (#393)
- Fixed non-POSIX fallback for file attribute reading (#371)
- Fixed NullPointerException in AuditLogger when running using slf4j-log4j12 bridge (#375)
- Improved cleanup of JDBC connections during database container startup checks
- Extracted MariaDB into a separate repository (#337)
- Added
TC_DAEMON
JDBC URL flag to preventContainerDatabaseDriver
from shutting down containers at the time all connections are closed. (#359, #360) - Added pre-flight checks (can be disabled with
checks.disable
configuration property) (#363) - Improved startup time by adding dynamic priorities to DockerClientProviderStrategy (#362)
- Added global configuration file
~/.testcontainers.properties
(#362) - Added container arguments to specify SELinux contexts for mounts (#334)
- Removed unused Jersey dependencies (#361)
- Removed deprecated, wrongly-generated setters from
GenericContainer
- Upgraded docker-java library to 3.0.10 (#349)
- Added basic audit logging of Testcontainers' actions via a specific SLF4J logger name with metadata captured via MDC. Intended for use in highly shared Docker environments.
- Use string-based detection of Selenium container startup (#328, #351)
- Use string-based detection of PostgreSQL container startup (#327, #317)
- Update libraries to recent versions (#333)
- Introduce abstraction over files and classpath resources, allowing recursive copying of directories (#313)
- Fix bug in space detection when
alpine:3.5
image has not yet been pulled (#323, #324) - Minor documentation fixes
- Add AOP Alliance dependencies to shaded deps to reduce chance of conflicts (#315)
1.2.0 - 2017-03-12
- Fix various escaping issues that may arise when paths contain spaces (#263, #279)
- General documentation fixes/improvements (#300, #303, #304)
- Improve reliability of
ResourceReaper
when there are a large number of containers returned bydocker ps -a
(#295)
- Support Docker for Windows via TCP socket connection (#291, #297, #309). _Note that Docker Compose is not yet supported under Docker for Windows (see #306)
- Expose
docker-java
'sCreateContainerCmd
API for low-level container tweaking (#301) - Shade
org.newsclub
and Guava dependencies (#299, #292) - Add
org.testcontainers
label to all containers created by Testcontainers (#294)
1.1.9 - 2017-02-12
- Fix inability to run Testcontainers on Alpine linux. Unix-socket-over-TCP is now used in linux environments where netty fails due to lack of glibc libraries (#290)
- Fix slow feedback in the case of missing JDBC drivers by failing-fast if the required driver cannot be found (#280, #230)
- Add ability to change 'tiny image' used for disk space checks (#287)
- Add ability to attach volumes to a container using 'volumes from' (#244, #289)
1.1.8 - 2017-01-22
- Compatibility fixes for Docker for Mac v1.13.0 (#272)
- Relax docker environment disk space check to accomodate unusual empty
df
output observed on Docker for Mac with OverlayFS (#273, #278) - Fix inadvertent private-scoping of startup checks'
StartupStatus
, which made implementation of custom startup checks impossible (#266) - Fix potential resource lead/deadlock when errors are encountered building images from a Dockerfile (#274)
- Add support for execution within a Docker container (#267), correcting resolution of container addresses
- Add support for version 2 of private docker registries, configured via
$HOME/.docker/config.json
(#270) - Use current classloader instead of system classloader for loading JDBC drivers (#261)
- Allow hardcoded container image names for Ambassador and VNC recorder containers to be changed via a configuration file (#277, #259)
- Allow Selenium Webdriver container image name to be specified as a constructor parameter (#249, #171)
1.1.7 - 2016-11-19
- Compensate for premature TCP socket opening in Docker for Mac (#160, #236)
- (Internal) Stabilise various parts of Testcontainers' self test suite (#241)
- Fix mounting of classpath resources when those resources are in a JAR file (#213)
- Reduce misleading error messages caused mainly by trying to perform operations on stopped containers (#243)
- Uses a default MySQL and MariaDB configuration to reduce memory footprint (#209, #243)
- Docker Compose can optionally now use a local
docker-compose
executable rather than running inside a container (#200) - Add support for privileged mode containers (#234, #235)
- Allow container/network cleanup (ResourceReaper) to be triggered programmatically (#231)
- Add optional tailing of logs for containers spawned by Docker Compose (#233)
- (Internal) Relocate non-proprietary database container tests to a single module
1.1.6 - 2016-09-22
- Fix logging of discovered Docker environment variables (#218)
- Adopt longer timeout periods for testing docker client configurations, and allow these to be further customised through system properties (#217, see *ClientProviderStrategy classes)
- Fix docker compose directory mounting on windows (#224)
- Handle and ignore further categories of failure in retrieval of docker environment disk space (#225)
- Add extra configurability options (database name, username, password) for PostgreSQL DB containers (#220)
- Add MariaDB container type (#215)
- Use Docker Compose
down
action for more robust teardown of compose environments - Ensure that Docker Compose operations run sequentially rather than concurrently if JUnit tests are parallelized (#226)
- Allow multiple Docker Compose files to be specified, to allow for extension/composition of services (#227)
1.1.5 - 2016-08-22
- Fix Docker Compose environment variable passthrough (#208)
- Remove Docker Compose networks when containers are shut down (#211) as well as at JVM shutdown
1.1.4 - 2016-08-16
- Fix JDBC proxy driver behaviour when used with Tomcat connection pool to avoid spawning excessive numbers of containers (#195)
- Shade Jersey dependencies in JDBC module to avoid classpath conflicts (#202)
- Fix NullPointerException when docker host has untagged images (#201)
- Fix relative paths for volumes mounted in docker-compose containers (#189)
- Update to v3.0.2 of docker-java library
- Switch to a shared, single instance docker client rather than a separate client instance per container rule (#193)
- Ensure that docker-compose pulls images (with no timeout), prior to trying to start (#188)
- Use official
docker/compose
image for running docker-compose (#190)
1.1.3 - 2016-07-27
- Further fix for shading of netty Linux native libs, specifically when run using Docker Compose support
- Ensure that file mode permissions are retained for Dockerfile builder
- Add support for specifying container working directory, and set this to match the
/compose
directory for Docker Compose - Improve resilience of Selenium container startup
- Add
withLogConsumer(...)
to allow a log consumer to be attached to a container from the moment of startup
1.1.2 - 2016-07-19
- Fix shading of netty Linux native libs
- Shade guava artifacts to prevent classloader conflicts
1.1.1 - 2016-07-17
- Improve shutdown of unnecessary docker clients (#170)
- Shade
io.netty
dependencies into the testcontainers core JAR to reduce conflicts (#170 and #157) - Remove timeouts for docker compose execution, particularly useful when image pulls are involved
- Improve output logging from docker-compose, pausing to log output in case of failure rather than letting logs intermingle.
- Reinstate container startup retry (removed in v1.1.0) as an optional setting, only used by default for Selenium webdriver containers
1.1.0 - 2016-07-05
- Apply shade relocation to Jersey repackaged Guava libs
- General logging and stability improvements to Docker Compose support
- Fix liveness checks to use specific IP address obtained using
getContainerIpAddress()
- Integrate interim support for Docker for Mac beta and Docker Machine for Windows. See docs for known limitations.
- Add support for Docker Compose v2 and scaling of compose containers
- Add support for attaching containers to specific networks.
- Allow container environment variables to be set using a Map
1.0.5 - 2016-05-02
- Fix problems associated with changes to
tenforce/virtuoso:latest
container, and replace with a pinned version. - Fix build-time dependency on visible-assertions library, which had downstream dependencies that started to break the Testcontainers build.
- Add support for pluggable wait strategies, i.e. overriding the default TCP connect wait strategy with HTTP ping or any user-defined approach.
- Add 'self-typing' to allow easy use of fluent-style options even when
GenericContainer
is subclassed. - Add support for defining extra entries for containers'
/etc/hosts
files. - Add fluent setter for setting file-system file/directory binding
1.0.4 - 2016-04-17
- Prevent unnecessary and erroneous reconfiguration of container if startup needs to be retried
- Consolidate container cleanup to ensure that ambassador containers used for Docker Compose are cleaned up appropriately
- Fix container liveness check port lookup for FixedHostPortGenericContainer.
- Upgrade docker-compose container to dduportal/docker-compose:1.6.0 for compatibility with docker compose file format v2.
- Add
docker exec
support for running commands against running containers - Add support for building container images on the fly from Dockerfiles, including optional Dockerfile builder DSL
- Add container name as prefix for container logs that are streamed to SLF4J
- Improve container startup failure detection, including adding the option to specify a minimum up time that the container should achieve before being considered started successfully
1.0.3 - 2016-03-31
- Resolve issues where containers would not be cleaned up on JVM shutdown if they failed to start correctly
- Fix validation problem where docker image names that contained private registry URLs with port number would be rejected
- Resolve bug where
docker pull
would try infinitely for a non-existent image name
- Set startup free disk space check to ensure that the Docker environment has a minimum of 2GB available rather than 10%
- Add streaming of container logs to SLF4J loggers, capture as Strings, and also the ability to wait for container log content to satisfy an expected predicate
- Allow configuration of docker container startup timeout
- Add detection of classpath Selenium version, and automatic selection of correct Selenium docker containers for compatibility
1.0.2 - 2016-02-27
- If a container fail to start up correctly, startup will now be retried up to a limit of 3 times
- Add resilience around
getMappedPort
method to fail fast when a port is not yet mapped, rather than generate misleading errors
- Add JDBC container module for OpenLink Virtuoso
- Add additional debug level logging to aid with diagnosis of docker daemon discovery problems
- Add support for using a local Unix socket to connect to the Docker daemon
1.0.1 - 2016-02-18
- Remove extraneous service loader entries in the shaded JAR
- Upgrade to v2.2.0 of docker-java client library to take advantage of unix socket fixes (see docker-java/docker-java#456)
- Validate that docker image names include a tag on creation
- By default, use docker machine name from
DOCKER_MACHINE_NAME
environment, ordefault
if it exists - Allow container ports to map to a fixed port on the host through use of the
FixedHostPortGenericContainer
subclass ofGenericContainer
1.0.0 - 2016-02-07
- Resolve Jersey/Jackson dependency clashes by shading (relocating) a version of these libraries into the core Testcontainers JAR
- Improve documentation and logging concerning discovery of Docker daemon
- Rename container
getIpAddress()
method togetContainerIpAddress()
and deprecate original method name. - Rename container
getHostIpAddress()
method togetTestHostIpAddress()
0.9.9 - 2016-01-12
- Resolve thread safety issues associated with use of a singleton docker client
- Resolve disk space check problems when running on a Debian-based docker host
- Fix CircleCI problems where the build could hit memory limits
- Remove bundled logback.xml to allow users more control over logging
- Add Travis CI support for improved breadth of testing
0.9.8 - 2015-08-12
- Change from Spotify docker client library to docker-java, for improved compatibility with latest versions of Docker
- Change from JDK 1.7 minimum requirement to JDK 1.8
- Replace boot2docker support with docker-machine support
- Docker images are now prefetched when a @Rule is instantiated
- Combined Rule and Container classes throughout, for a reduced set of public classes and removal of some duplication
- Improvements to container cleanup, especially removal of data volumes
- General improvements to error handling, logging etc throughout
- Docker Compose support
- Automatic docker environment disk space check
0.9.7 - 2015-08-07
- Support for overriding MySQL container configuration (my.cnf file overrides)
- Replace dependency on org.testpackage with org.rnorth.visible-assertions
0.9.6 - 2015-07-22
- Generic container support (allows use of any docker image) using a GenericContainerRule.
- Renamed from org.rnorth.test-containers to org.testcontainers
- Explicit support for usage on linux and use with older versions of Docker (v1.2.0 tested)
0.9.5 - 2015-06-28
- Oracle XE container support
- Support for JDK 1.7 (previously was JDK 1.8+)
0.9.4 and 0.9.3 - 2015-06-23
- Refactored for better modularization
0.9.2 - 2015-06-13
- 'Sidekick' VNC recording container to record video of Selenium test sessions
- Alter timezone used for time display inside Selenium containers
0.9.1 - 2015-06-07
- Support for Selenium webdriver containers
- Recording of Selenium test sessions using vnc2flv
0.9 - 2015-04-29
Initial release