Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

API Overview

This page provides a quick reference to all modules and their primary functions.

Core Modules

Testcontainers.Container

Container lifecycle management.

(* Start a container *)
val start : Container_request.t -> t Lwt.t

(* Stop a container *)
val stop : ?timeout:float -> t -> unit Lwt.t

(* Stop and remove a container *)
val terminate : t -> unit Lwt.t

(* Start, run function, then terminate *)
val with_container : Container_request.t -> (t -> 'a Lwt.t) -> 'a Lwt.t

(* Get container ID *)
val id : t -> string

(* Get container name *)
val name : t -> string

(* Get host (always 127.0.0.1) *)
val host : t -> string Lwt.t

(* Get mapped port *)
val mapped_port : t -> Port.t -> int Lwt.t

(* Get all mapped ports *)
val mapped_ports : t -> Port.mapped_port list Lwt.t

(* Check if running *)
val is_running : t -> bool Lwt.t

(* Get container state *)
val state : t -> [> `Created | `Running | `Paused | `Exited | `Dead | `Restarting] Lwt.t

(* Execute command in container *)
val exec : t -> string list -> (int * string) Lwt.t

(* Get container logs *)
val logs : ?since:float -> ?follow:bool -> t -> string Lwt.t

(* Copy file to container *)
val copy_file_to : t -> src:string -> dest:string -> unit Lwt.t

(* Copy file from container *)
val copy_file_from : t -> src:string -> dest:string -> unit Lwt.t

(* Copy string content to container *)
val copy_content_to : t -> content:string -> dest:string -> unit Lwt.t

Testcontainers.Container_request

Builder for container configuration.

(* Create request with image *)
val create : string -> t

(* Image configuration *)
val with_image : string -> t -> t
val image : t -> string

(* Port configuration *)
val with_exposed_port : Port.t -> t -> t
val with_exposed_ports : Port.t list -> t -> t
val exposed_ports : t -> Port.t list

(* Environment variables *)
val with_env : string -> string -> t -> t
val with_envs : (string * string) list -> t -> t
val environment : t -> (string * string) list

(* Command and entrypoint *)
val with_cmd : string list -> t -> t
val with_entrypoint : string list -> t -> t
val command : t -> string list option
val entrypoint : t -> string list option

(* Container settings *)
val with_name : string -> t -> t
val with_user : string -> t -> t
val with_working_dir : string -> t -> t
val with_privileged : bool -> t -> t
val name : t -> string option
val user : t -> string option
val working_dir : t -> string option
val privileged : t -> bool

(* Labels *)
val with_label : string -> string -> t -> t
val with_labels : (string * string) list -> t -> t
val labels : t -> (string * string) list

(* Mounts *)
val with_mount : Volume.mount -> t -> t
val mounts : t -> Volume.mount list

(* Wait strategy *)
val with_wait_strategy : Wait_strategy.t -> t -> t
val wait_strategy : t -> Wait_strategy.t option

(* Timeouts *)
val with_startup_timeout : float -> t -> t
val startup_timeout : t -> float

(* Auto remove *)
val with_auto_remove : bool -> t -> t
val auto_remove : t -> bool

Testcontainers.Port

Port types and utilities.

type protocol = Tcp | Udp

type t = {
  port : int;
  protocol : protocol;
}

type mapped_port = {
  container_port : t;
  host_port : int;
  host_ip : string;
}

(* Create ports *)
val tcp : int -> t
val udp : int -> t

(* Parse from string *)
val of_string : string -> t  (* "8080/tcp" -> Port.t *)

(* Convert to string *)
val to_string : t -> string  (* "8080/tcp" *)
val to_docker_format : t -> string

(* Comparison *)
val equal : t -> t -> bool
val compare : t -> t -> int

(* Protocol conversion *)
val protocol_to_string : protocol -> string

Testcontainers.Volume

Volume and mount configuration.

type bind_mode = ReadWrite | ReadOnly

type mount =
  | Bind of { host_path : string; container_path : string; mode : bind_mode }
  | Volume of { name : string; container_path : string; mode : bind_mode }
  | Tmpfs of { container_path : string; size : int option }

(* Create mounts *)
val bind : ?mode:bind_mode -> host:string -> container:string -> unit -> mount
val volume : ?mode:bind_mode -> name:string -> container:string -> unit -> mount
val tmpfs : ?size:int -> container:string -> unit -> mount

(* Utilities *)
val container_path : mount -> string
val to_docker_bind_format : mount -> string
val mode_to_string : bind_mode -> string

Testcontainers.Wait_strategy

Wait strategy configuration.

type t

(* Create strategies *)
val for_listening_port : Port.t -> t
val for_log : ?occurrence:int -> string -> t
val for_log_regex : string -> t
val for_http : ?port:Port.t -> ?status_codes:int list -> string -> t
val for_exec : string list -> t
val for_health_check : unit -> t
val none : t

(* Combinators *)
val all : t list -> t
val any : t list -> t

(* Configuration *)
val with_timeout : float -> t -> t
val with_poll_interval : float -> t -> t

(* Inspection *)
val name : t -> string
val timeout : t -> float

Testcontainers.Network

Docker network management.

type t

(* Create network *)
val create : ?driver:string -> string -> t Lwt.t

(* Remove network *)
val remove : t -> unit Lwt.t

(* Create, use, then remove *)
val with_network : ?driver:string -> string -> (t -> 'a Lwt.t) -> 'a Lwt.t

(* Properties *)
val id : t -> string
val name : t -> string

Testcontainers.Error

Error types and handling.

type t =
  | Container_not_found of string
  | Container_not_running of string
  | Container_start_failed of { id : string; message : string }
  | Container_stop_failed of { id : string; message : string }
  | Wait_timeout of { strategy : string; timeout : float }
  | Docker_error of { status : int; message : string }
  | Docker_connection_failed of string
  | Invalid_configuration of string
  | Image_pull_failed of { image : string; message : string }
  | Port_not_mapped of { container_port : int; protocol : string }

exception Testcontainers_error of t

val to_string : t -> string
val raise_error : t -> 'a

Testcontainers.Docker_client

Low-level Docker API client.

(* Health check *)
val ping : unit -> bool Lwt.t

(* Version info *)
val version : unit -> (string * string) Lwt.t

(* Image operations *)
val image_exists : string -> bool Lwt.t
val pull_image : string -> unit Lwt.t

Module Libraries

Testcontainers_postgres.Postgres_container

type config

val create : unit -> config
val with_image : string -> config -> config
val with_database : string -> config -> config
val with_username : string -> config -> config
val with_password : string -> config -> config

val database : config -> string
val username : config -> string

val start : config -> Container.t Lwt.t
val host : Container.t -> string Lwt.t
val port : config -> Container.t -> int Lwt.t
val connection_string : config -> Container.t -> string Lwt.t
val jdbc_url : config -> Container.t -> string Lwt.t

val with_postgres : ?config:(config -> config) ->
  (Container.t -> string -> 'a Lwt.t) -> 'a Lwt.t

Testcontainers_mysql.Mysql_container

type config

val create : unit -> config
val with_image : string -> config -> config
val with_database : string -> config -> config
val with_username : string -> config -> config
val with_password : string -> config -> config
val with_root_password : string -> config -> config

val database : config -> string
val username : config -> string
val password : config -> string

val start : config -> Container.t Lwt.t
val host : Container.t -> string Lwt.t
val port : config -> Container.t -> int Lwt.t
val connection_string : config -> Container.t -> string Lwt.t
val jdbc_url : config -> Container.t -> string Lwt.t

val with_mysql : ?config:(config -> config) ->
  (Container.t -> string -> 'a Lwt.t) -> 'a Lwt.t

Testcontainers_mongo.Mongo_container

type config

val create : unit -> config
val with_image : string -> config -> config
val with_username : string -> config -> config
val with_password : string -> config -> config

val username : config -> string
val password : config -> string

val start : config -> Container.t Lwt.t
val host : Container.t -> string Lwt.t
val port : config -> Container.t -> int Lwt.t
val connection_string : config -> Container.t -> string Lwt.t

val with_mongo : ?config:(config -> config) ->
  (Container.t -> string -> 'a Lwt.t) -> 'a Lwt.t

Testcontainers_redis.Redis_container

type config

val create : unit -> config
val with_image : string -> config -> config

val start : config -> Container.t Lwt.t
val host : Container.t -> string Lwt.t
val port : Container.t -> int Lwt.t
val uri : config -> Container.t -> string Lwt.t

val with_redis : ?config:(config -> config) ->
  (Container.t -> string -> 'a Lwt.t) -> 'a Lwt.t

Testcontainers_rabbitmq.Rabbitmq_container

type config

val create : unit -> config
val with_image : string -> config -> config
val with_username : string -> config -> config
val with_password : string -> config -> config
val with_vhost : string -> config -> config

val username : config -> string
val vhost : config -> string

val start : config -> Container.t Lwt.t
val host : Container.t -> string Lwt.t
val amqp_port : Container.t -> int Lwt.t
val management_port : Container.t -> int Lwt.t
val amqp_url : config -> Container.t -> string Lwt.t

val with_rabbitmq : ?config:(config -> config) ->
  (Container.t -> string -> 'a Lwt.t) -> 'a Lwt.t