dockertest

package module
v4.0.0-...-d69fa50 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 7, 2026 License: Apache-2.0 Imports: 27 Imported by: 0

README

ORY Dockertest

Build Status Coverage Status

Use Docker to run your Go language integration tests against third party services on Microsoft Windows, Mac OSX and Linux! Dockertest uses Docker to spin up images on Windows and Mac OSX.

Dockertest supports running any Docker Image from Docker Hub and Dockerfile.

Table of Contents

Why should I use Dockertest?

When developing applications, it is often necessary to use services that talk to a database system. Unit testing these services can be cumbersome because mocking rewriting at least some, if not all mocks. The same goes for API changes in the database/DBAL is strenuous. Making slight changes to the schema implies DBAL.

To avoid this, it is smarter to test these specific services against a real database that is destroyed after testing. Docker is the perfect system for running integration tests as you can spin up containers in a few seconds and kill them when the test completes.

The Dockertest library provides easy to use commands for spinning up Docker containers and using them for your tests.

[!WARNING]

Dockertest v4 is not yet finalized and may still receive breaking changes before the stable release.

Installation

go get github.com/ory/dockertest/v4

Quick Start

package myapp_test

import (
    "context"
    "os"
    "testing"

    dockertest "github.com/ory/dockertest/v4"
)

func TestPostgres(t *testing.T) {
    pool := dockertest.NewPoolT(t, "")

    db := pool.RunT(t, "postgres",
        dockertest.WithTag("14"),
        dockertest.WithEnv([]string{
            "POSTGRES_PASSWORD=secret",
            "POSTGRES_DB=testdb",
        }),
    )
    db.Cleanup(t)

    // Use db.GetHostPort("5432/tcp") to connect
    hostPort := db.GetHostPort("5432/tcp")
    // Connect to postgres://postgres:secret@hostPort/testdb
}

func TestMain(m *testing.M) {
    // Note: TestMain doesn't have testing.T, so we create a context here
    // In regular tests, always use t.Context() instead
    ctx := context.Background()
    pool, _ := dockertest.NewPool(ctx, "")
    code := m.Run()
    // Clean up before os.Exit — deferred functions do not run after os.Exit.
    pool.Cleanup(ctx)
    pool.Close()
    os.Exit(code)
}

Migration from v3

Version 4 introduces automatic container reuse, making tests significantly faster by reusing containers across test runs. Additionally, a lightweight docker client is used which reduces third party dependencies significantly.

See UPGRADE.md for the complete migration guide.

API overview

View the Go API documentation.

Pool creation

// For tests - auto-cleanup with t.Cleanup()
pool := dockertest.NewPoolT(t, "")

// With options
pool := dockertest.NewPoolT(t, "",
    dockertest.WithMaxWait(2*time.Minute),
)

// For non-test code - requires manual Close()
ctx := context.Background()
pool, err := dockertest.NewPool(ctx, "")
if err != nil {
    panic(err)
}
defer pool.Close()

Running containers

// Test helper - fails test on error
resource := pool.RunT(t, "postgres",
    dockertest.WithTag("14"),
    dockertest.WithEnv([]string{"POSTGRES_PASSWORD=secret"}),
    dockertest.WithCmd([]string{"postgres", "-c", "log_statement=all"}),
)

// With error handling
resource, err := pool.Run(ctx, "postgres",
    dockertest.WithTag("14"),
    dockertest.WithEnv([]string{"POSTGRES_PASSWORD=secret"}),
)
if err != nil {
    panic(err)
}

Container configuration

Customize container settings with configuration options:

resource := pool.RunT(t, "postgres",
    dockertest.WithTag("14"),
    dockertest.WithUser("postgres"),
    dockertest.WithWorkingDir("/var/lib/postgresql/data"),
    dockertest.WithLabels(map[string]string{
        "test":    "integration",
        "service": "database",
    }),
    dockertest.WithHostname("test-db"),
    dockertest.WithEnv([]string{"POSTGRES_PASSWORD=secret"}),
)

Available configuration options:

  • WithUser(user string) - Set the user to run commands as (supports "user" or "user:group")
  • WithWorkingDir(dir string) - Set the working directory
  • WithLabels(labels map[string]string) - Add labels to the container
  • WithHostname(hostname string) - Set the container hostname
  • WithEnv(env []string) - Set environment variables
  • WithCmd(cmd []string) - Override the default command
  • WithEntrypoint(entrypoint []string) - Override the default entrypoint
  • WithHostConfig(modifier func(*container.HostConfig)) - Modify the host config (port bindings, volumes, restart policy, memory/CPU limits)

For advanced container configuration, use WithContainerConfig:

stopTimeout := 30
resource := pool.RunT(t, "app",
    dockertest.WithContainerConfig(func(cfg *container.Config) {
        cfg.StopTimeout = &stopTimeout
        cfg.StopSignal = "SIGTERM"
        cfg.Healthcheck = &container.HealthConfig{
            Test:     []string{"CMD", "curl", "-f", "http://localhost/health"},
            Interval: 10 * time.Second,
            Timeout:  5 * time.Second,
            Retries:  3,
        }
    }),
)

For host-level configuration, use WithHostConfig:

resource := pool.RunT(t, "postgres",
    dockertest.WithTag("14"),
    dockertest.WithHostConfig(func(hc *container.HostConfig) {
        hc.RestartPolicy = container.RestartPolicy{
            Name:              container.RestartPolicyOnFailure,
            MaximumRetryCount: 3,
        }
    }),
)

Container reuse

[!WARNING]

Do not use resource.Cleanup(t) on reused containers. Because reused containers are shared across tests, cleaning up one reference will remove the container for all other tests that depend on it. Only use pool.Cleanup(ctx) in TestMain to clean up reused containers after all tests have finished.

Containers are automatically reused based on repository:tag:

// First test creates container
r1 := pool.RunT(t, "postgres", dockertest.WithTag("14"))

// Second test reuses the same container (2-3x faster)
r2 := pool.RunT(t, "postgres", dockertest.WithTag("14"))

// r1 and r2 point to the same container

Disable reuse if needed:

resource := pool.RunT(t, "postgres",
    dockertest.WithTag("14"),
    dockertest.WithoutReuse(), // Always create new container
)

Getting connection info

resource := pool.RunT(t, "postgres", dockertest.WithTag("14"))

// Get host port (e.g., "127.0.0.1:54320")
hostPort := resource.GetHostPort("5432/tcp")

// Get just the port (e.g., "54320")
port := resource.GetPort("5432/tcp")

// Get just the IP (e.g., "127.0.0.1")
ip := resource.GetBoundIP("5432/tcp")

// Get container ID
id := resource.ID()

Executing commands

Run commands inside a running container:

result, err := resource.Exec(ctx, []string{"pg_isready", "-U", "postgres"})
if err != nil {
    t.Fatal(err)
}
if result.ExitCode != 0 {
    t.Fatalf("command failed: %s", result.StdErr)
}
t.Log(result.StdOut)

Cleanup

// In tests - cleanup when test finishes
resource.Cleanup(t)

// Manual cleanup
err := resource.Close(ctx)

// Test helper - fails test on error
resource.CloseT(t)

// Cleanup all containers (in TestMain)
pool.Cleanup(ctx)

Error Handling

resource, err := pool.Run(ctx, "postgres", dockertest.WithTag("14"))
if errors.Is(err, dockertest.ErrImagePullFailed) {
    // Image could not be pulled
}
if errors.Is(err, dockertest.ErrContainerCreateFailed) {
    // Container creation failed
}
if errors.Is(err, dockertest.ErrContainerStartFailed) {
    // Container start failed
}

Examples

See the examples directory for complete examples.

Troubleshoot & FAQ

Out of disk space

Try cleaning up the images with docker-cleanup-volumes.

Running dockertest in Gitlab CI

How to run dockertest on shared gitlab runners?

You should add docker dind service to your job which starts in sibling container. That means database will be available on host docker.
You app should be able to change db host through environment variable.

Here is the simple example of gitlab-ci.yml:

stages:
  - test
go-test:
  stage: test
  image: golang:1.15
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
    YOUR_APP_DB_HOST: docker
  script:
    - go test ./...

Plus in the pool.Retry method that checks for connection readiness, you need to use $YOUR_APP_DB_HOST instead of localhost.

How to run dockertest on group(custom) gitlab runners?

Gitlab runner can be run in docker executor mode to save compatibility with shared runners.
Here is the simple register command:

gitlab-runner register -n \
 --url https://gitlab.com/ \
 --registration-token $YOUR_TOKEN \
 --executor docker \
 --description "My Docker Runner" \
 --docker-image "docker:19.03.12" \
 --docker-privileged

You only need to instruct docker dind to start with disabled tls.
Add variable DOCKER_TLS_CERTDIR: "" to gitlab-ci.yml above. It will tell docker daemon to start on 2375 port over http.

Running Dockertest using GitHub actions

name: Test with Docker

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    services:
      dind:
        image: docker:23.0-rc-dind-rootless
        ports:
          - 2375:2375
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Go
        uses: actions/setup-go@v4
        with:
          go-version: "1.21"

      - name: Test with Docker
        run: go test -v ./...

Documentation

Overview

Package dockertest provides Docker container orchestration for Go testing.

Dockertest v4 uses the official github.com/moby/moby/client and provides a modern, context-aware API with automatic container reuse for fast tests.

Quick Start

func TestDatabase(t *testing.T) {
    pool := dockertest.NewPoolT(t, "")
    db := pool.RunT(t, "postgres",
        dockertest.WithTag("14"),
        dockertest.WithEnv([]string{"POSTGRES_PASSWORD=secret"}),
    )
    db.Cleanup(t)

    hostPort := db.GetHostPort("5432/tcp")
    connStr := fmt.Sprintf("postgres://postgres:secret@%s/postgres?sslmode=disable", hostPort)

    err := pool.Retry(t.Context(), 30*time.Second, func() error {
        conn, err := sql.Open("postgres", connStr)
        if err != nil {
            return err
        }
        defer conn.Close()
        return conn.Ping()
    })
    if err != nil {
        t.Fatalf("Database not ready: %v", err)
    }
}

Features

- Container reuse: Containers are reused by default based on repository:tag for 2-3x faster tests - Context support: All operations accept context.Context for cancellation and timeouts - Test helpers: *T methods use t.Context() and t.Cleanup() for simplified test lifecycle - Networks: Create networks for container-to-container communication - Custom images: Build and run custom Docker images from Dockerfiles

See https://github.com/ory/dockertest for more examples and documentation.

Index

Constants

This section is empty.

Variables

View Source
var ErrClientClosed = errors.New("client is closed")

ErrClientClosed is returned when an operation is attempted on a resource whose pool or client has already been closed.

View Source
var ErrContainerCreateFailed = errors.New("container creation failed")

ErrContainerCreateFailed is returned when container creation fails.

View Source
var ErrContainerStartFailed = errors.New("container start failed")

ErrContainerStartFailed is returned when starting a container fails.

View Source
var ErrImagePullFailed = errors.New("image pull failed")

ErrImagePullFailed is returned when pulling a Docker image fails.

Functions

func Register

func Register(reuseID string, r *Resource) error

Register stores a resource with the given reuseID in the global registry.

If a resource with the same reuseID already exists, the existing resource is kept and no error is returned. This ensures that concurrent registration attempts result in exactly one resource being stored. The race winner's resource becomes the canonical one in the registry, which is safe because both resources represent containers with the same configuration (same image, tag, env, etc.).

The global registry enables container reuse across tests. Containers registered here can be retrieved with Get.

Note: This function is called automatically by Pool.Run when container reuse is enabled. You typically don't need to call it directly.

func ResetRegistry

func ResetRegistry()

ResetRegistry clears all resources from the global registry. This does NOT stop or remove the containers themselves.

func Retry

func Retry(ctx context.Context, timeout, interval time.Duration, fn func() error) error

Retry retries fn with a fixed interval until it succeeds, the context is cancelled, or the timeout is reached. The interval is deterministic (no jitter).

func RetryWithBackoff

func RetryWithBackoff(ctx context.Context, timeout, initialInterval, maxInterval time.Duration, fn func() error) error

RetryWithBackoff retries fn with exponential backoff until it succeeds, the context is cancelled, or the timeout is reached.

The interval starts at initialInterval and doubles after each attempt, capped at maxInterval. The backoff is deterministic (no jitter).

Types

type BuildOptions

type BuildOptions struct {
	// Dockerfile is the name of the Dockerfile within the ContextDir.
	// Defaults to "Dockerfile" if empty.
	Dockerfile string

	// ContextDir is the directory containing the Dockerfile and build context.
	// This directory will be archived and sent to the Docker daemon.
	// REQUIRED - build will fail if empty.
	ContextDir string

	// Tags are the tags to apply to the built image.
	// If empty, the image name from BuildAndRun will be used.
	Tags []string

	// BuildArgs are build-time variables passed to the Dockerfile.
	// Use pointers to distinguish between empty string and unset.
	// Example: map[string]*string{"VERSION": &versionStr}
	BuildArgs map[string]*string

	// Labels are metadata to apply to the built image.
	// Example: map[string]string{"version": "1.0", "env": "test"}
	Labels map[string]string

	// NoCache disables build cache when set to true.
	// Useful for ensuring a clean build.
	NoCache bool

	// ForceRemove always removes intermediate containers, even on build failure.
	// Useful for keeping the build environment clean.
	ForceRemove bool
}

BuildOptions configures image building from a Dockerfile. Use with Pool.BuildAndRun to build and run custom Docker images.

Only ContextDir is required. All other fields are optional and have sensible defaults.

type ExecResult

type ExecResult struct {
	StdOut   string
	StdErr   string
	ExitCode int
}

ExecResult holds the output of a command executed inside a container.

type Network

type Network struct {
	Network network.Inspect
	// contains filtered or unexported fields
}

Network represents a Docker network managed by dockertest. Networks allow containers to communicate with each other using container names as hostnames, isolated from other networks.

Create networks with Pool.CreateNetwork and connect containers with Resource.ConnectToNetwork.

func (*Network) Close

func (n *Network) Close(ctx context.Context) error

Close removes the network. Any containers still connected to the network should be disconnected first, or the network removal will fail.

func (*Network) CloseT

func (n *Network) CloseT(t TestingTB)

CloseT removes the network and calls t.Fatalf on error.

type NetworkCreateOptions

type NetworkCreateOptions struct {
	Driver     string            // Network driver (e.g., "bridge", "overlay")
	Labels     map[string]string // User-defined metadata
	Options    map[string]string // Driver-specific options
	Internal   bool              // Restrict external access to the network
	Attachable bool              // Enable manual container attachment
	Ingress    bool              // Create an ingress network (swarm mode)
	EnableIPv6 bool              // Enable IPv6 networking
}

NetworkCreateOptions holds options for creating a network. This is a subset of mobyclient.NetworkCreateOptions from github.com/moby/moby/client to provide a simpler API while allowing common customizations.

All fields are optional. If not specified, Docker's defaults are used:

  • Driver defaults to "bridge"
  • Internal defaults to false (network has external access)
  • Attachable defaults to false
  • EnableIPv6 defaults to false

type Pool

type Pool struct {
	MaxWait time.Duration // maximum wait time for operations
	// contains filtered or unexported fields
}

Pool manages Docker resources and operations. It provides methods for running containers, building images, creating networks, and managing the lifecycle of Docker resources in tests.

A Pool instance owns a Docker client connection and manages resources through that connection. Use NewPool or NewPoolT to create a Pool, and Close to clean up.

func NewPool

func NewPool(ctx context.Context, endpoint string, opts ...PoolOption) (*Pool, error)

NewPool creates a new Pool with the given endpoint and options.

The endpoint parameter must be empty. The Docker client is created from environment variables (DOCKER_HOST, DOCKER_TLS_VERIFY, DOCKER_CERT_PATH) or provided via WithMobyClient option.

To specify a custom Docker endpoint, set the DOCKER_HOST environment variable before calling NewPool, or provide a custom client with WithMobyClient.

The default MaxWait is 60 seconds. This can be customized with WithMaxWait.

The Pool creates and owns a Docker client by default. Call Close when done to release resources. If you need to provide your own client, use WithMobyClient.

Example:

ctx := context.Background()
pool, err := dockertest.NewPool(ctx, "")
if err != nil {
	panic(err)
}
defer pool.Close(ctx)

func NewPoolT

func NewPoolT(t *testing.T, endpoint string, opts ...PoolOption) *Pool

NewPoolT creates a new Pool using t.Context() and registers cleanup with t.Cleanup().

func (*Pool) BuildAndRun

func (p *Pool) BuildAndRun(ctx context.Context, name string, buildOpts *BuildOptions, runOpts ...RunOption) (*Resource, error)

BuildAndRun builds a Docker image from a Dockerfile and runs it as a container.

The name parameter is used as the image tag. buildOpts.ContextDir is required. The built image is cleaned up on error, but not on success - it will be reused for subsequent runs with the same name, making repeated test runs faster.

Example:

resource, err := pool.BuildAndRun(ctx, "myapp:test",
	&dockertest.BuildOptions{
		ContextDir: "./testdata",
		Dockerfile: "Dockerfile.test",
	},
)
if err != nil {
	panic(err)
}
defer resource.Close(ctx)

func (*Pool) BuildAndRunT

func (p *Pool) BuildAndRunT(t TestingTB, name string, buildOpts *BuildOptions, runOpts ...RunOption) *Resource

BuildAndRunT is a test helper that uses t.Context() and calls t.Fatalf on error.

func (*Pool) Close

func (p *Pool) Close(ctx context.Context) error

Close cleans up all tracked containers and networks, then closes the Pool's Docker client if it was created by the Pool. If a custom client was provided via WithMobyClient, it is not closed (the caller remains responsible for closing it).

It is safe to call Close multiple times.

func (*Pool) CreateNetwork

func (p *Pool) CreateNetwork(ctx context.Context, name string, opts *NetworkCreateOptions) (*Network, error)

CreateNetwork creates a new Docker network with the given name and options. If opts is nil, default network options are used (bridge driver, external access allowed).

func (*Pool) CreateNetworkT

func (p *Pool) CreateNetworkT(t TestingTB, name string, opts *NetworkCreateOptions) *Network

CreateNetworkT creates a network using t.Context() and calls t.Fatalf on error.

func (*Pool) Retry

func (p *Pool) Retry(ctx context.Context, timeout time.Duration, fn func() error) error

Retry is a convenience method that wraps the package-level Retry function. If timeout is 0, Pool.MaxWait is used as the default. The interval is fixed at 1 second.

func (*Pool) Run

func (p *Pool) Run(ctx context.Context, repository string, opts ...RunOption) (*Resource, error)

Run starts a container with the given repository and options. Containers are reused by default based on repository:tag to speed up tests.

Example:

resource, err := pool.Run(ctx, "postgres",
	dockertest.WithTag("14"),
	dockertest.WithEnv([]string{"POSTGRES_PASSWORD=secret"}),
)
if err != nil {
	panic(err)
}
defer resource.Close(ctx)

func (*Pool) RunT

func (p *Pool) RunT(t TestingTB, repository string, opts ...RunOption) *Resource

RunT is a test helper that uses t.Context() and calls t.Fatalf on error.

type PoolOption

type PoolOption func(*Pool)

PoolOption is a functional option for configuring a Pool. Use with NewPool or NewPoolT to customize Pool behavior.

func WithMaxWait

func WithMaxWait(d time.Duration) PoolOption

WithMaxWait sets the maximum wait time for operations. The default MaxWait is 60 seconds.

func WithMobyClient

func WithMobyClient(c client.DockerClient) PoolOption

WithMobyClient sets a custom Docker client. When a custom client is provided, the Pool will not close it on Pool.Close().

type Resource

type Resource struct {
	Container container.InspectResponse
	// contains filtered or unexported fields
}

Resource represents a Docker container managed by dockertest. It provides methods for interacting with the container (getting ports, closing, etc.) and accessing the underlying Docker container details.

func Get

func Get(reuseID string) (*Resource, bool)

Get retrieves a resource from the global registry by reuseID. Returns the resource and true if found, nil and false otherwise.

The global registry stores containers for reuse. By default, containers are registered with a reuseID of "repository:tag".

Note: This function is called automatically by Pool.Run when checking for existing containers. You typically don't need to call it directly.

func GetAll

func GetAll() []*Resource

GetAll returns a slice of all resources in the global registry. The order of resources in the returned slice is not guaranteed.

This is useful for cleanup operations that need to process all registered containers:

func cleanupAll(ctx context.Context) {
	for _, resource := range dockertest.GetAll() {
		_ = resource.Close(ctx)
	}
	dockertest.ResetRegistry()
}

func (*Resource) Cleanup

func (r *Resource) Cleanup(t TestingTB)

Cleanup registers container cleanup with t.Cleanup. The container will be removed when the test finishes.

func (*Resource) Close

func (r *Resource) Close(ctx context.Context) error

Close stops and removes the container. Anonymous volumes created by the container are also removed.

func (*Resource) CloseT

func (r *Resource) CloseT(t TestingTB)

CloseT stops and removes the container and calls t.Fatalf on error.

func (*Resource) ConnectToNetwork

func (r *Resource) ConnectToNetwork(ctx context.Context, net *Network) error

ConnectToNetwork connects the container to the given network. The resource's Container field is automatically updated with the latest network settings after connection.

func (*Resource) DisconnectFromNetwork

func (r *Resource) DisconnectFromNetwork(ctx context.Context, net *Network) error

DisconnectFromNetwork disconnects the container from the given network. The resource's Container field is automatically updated with the latest network settings after disconnection.

func (*Resource) Exec

func (r *Resource) Exec(ctx context.Context, cmd []string) (ExecResult, error)

Exec runs a command inside the container and returns the result.

func (*Resource) GetBoundIP

func (r *Resource) GetBoundIP(portID string) string

GetBoundIP returns the host IP bound to the given container port. The portID parameter should include the protocol (e.g., "5432/tcp").

func (*Resource) GetHostPort

func (r *Resource) GetHostPort(portID string) string

GetHostPort returns the host:port combination for the given container port. The portID parameter should include the protocol (e.g., "5432/tcp").

func (*Resource) GetIPInNetwork

func (r *Resource) GetIPInNetwork(net *Network) string

GetIPInNetwork returns the container's IP address in the given network. Returns empty string if the container is not connected to the network.

func (*Resource) GetPort

func (r *Resource) GetPort(portID string) string

GetPort returns the host port bound to the given container port. The portID parameter should include the protocol (e.g., "5432/tcp").

func (*Resource) ID

func (r *Resource) ID() string

ID returns the container ID.

func (*Resource) Logs

func (r *Resource) Logs(ctx context.Context) (string, error)

Logs returns the container logs, demultiplexing stdout and stderr streams. Both stdout and stderr are combined in the returned string.

type RunOption

type RunOption func(*runConfig) error

RunOption configures container creation. Use with Pool.Run or Pool.RunT to customize how containers are started.

func WithCmd

func WithCmd(cmd []string) RunOption

WithCmd sets the container command, overriding the image's default CMD.

func WithContainerConfig

func WithContainerConfig(modifier func(*container.Config)) RunOption

WithContainerConfig allows direct modification of the container.Config. This is useful for advanced options not covered by other WithXxx functions. The modifier is applied after all other options are processed.

func WithEntrypoint

func WithEntrypoint(entrypoint []string) RunOption

WithEntrypoint sets the container entrypoint, overriding the image's default ENTRYPOINT.

func WithEnv

func WithEnv(env []string) RunOption

WithEnv sets environment variables for the container. Each string should be in "KEY=value" format.

func WithHostConfig

func WithHostConfig(modifier func(*container.HostConfig)) RunOption

WithHostConfig allows direct modification of the container.HostConfig. Use this to set host-level options like port bindings, volume mounts, restart policies, memory/CPU limits, or AutoRemove. The modifier is applied after the default HostConfig is constructed.

func WithHostname

func WithHostname(hostname string) RunOption

WithHostname sets the container's hostname.

func WithLabels

func WithLabels(labels map[string]string) RunOption

WithLabels sets labels on the container. Labels are useful for marking test containers or adding metadata.

func WithReuseID

func WithReuseID(id string) RunOption

WithReuseID sets a custom reuse ID for container reuse. By default, containers are reused based on "repository:tag".

func WithTag

func WithTag(tag string) RunOption

WithTag sets the image tag. Default is "latest".

func WithUser

func WithUser(user string) RunOption

WithUser sets the user that will run commands inside the container. Supports both "user" and "user:group" formats.

func WithWorkingDir

func WithWorkingDir(dir string) RunOption

WithWorkingDir sets the working directory for commands run in the container.

func WithoutReuse

func WithoutReuse() RunOption

WithoutReuse disables container reuse for this run. A new container will be created every time.

type TestingTB

type TestingTB interface {
	Helper()
	Context() context.Context
	Cleanup(func())
	Logf(format string, args ...any)
	Fatalf(format string, args ...any)
}

TestingTB is a subset of testing.TB for dependency injection. This interface allows methods to work with test helpers without directly depending on the testing package.

Directories

Path Synopsis
internal
client
Package client provides Docker client abstraction for testability.
Package client provides Docker client abstraction for testability.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL