All notable changes to this project will be documented in this file.
- 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)
- Abstracted and changed database init script functionality to support use of SQL-like scripts with non-JDBC connections. (#551)
- Added
JdbcDatabaseContainer(Future)
constructor. (#543)
- 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