• Stars
    star
    198
  • Rank 196,898 (Top 4 %)
  • Language
    Java
  • License
    MIT License
  • Created almost 9 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Wiremock Docker image

WireMock Docker images

Main Nightly Docker Pulls a

The official Docker image for WireMock Standalone deployments. It includes WireMock for Java under the hood, and fully compatible with its features. You can learn more about WireMock standalone on the WireMock docs site.

Quick Start

In a temporary directory, checkout the demo repository, pull the Docker image, and start the WireMock instance.

docker pull wiremock/wiremock:latest
git clone https://github.com/wiremock/wiremock-docker.git
docker run -it --rm \
  -p 8080:8080 \
  -v $PWD/wiremock-docker/samples/hello/stubs:/home/wiremock \
  wiremock/wiremock:latest

You will get a CLI output like this one:

██     ██ ██ ██████  ███████ ███    ███  ██████   ██████ ██   ██
██     ██ ██ ██   ██ ██      ████  ████ ██    ██ ██      ██  ██
██  █  ██ ██ ██████  █████   ██ ████ ██ ██    ██ ██      █████
██ ███ ██ ██ ██   ██ ██      ██  ██  ██ ██    ██ ██      ██  ██
 ███ ███  ██ ██   ██ ███████ ██      ██  ██████   ██████ ██   ██

----------------------------------------------------------------
|               Cloud: https://wiremock.io/cloud               |
|               Slack: https://slack.wiremock.org              |
----------------------------------------------------------------

port:                         8080
enable-browser-proxying:      false
no-request-journal:           false
verbose:                      false
extensions:                   response-template,webhook

Supported architectures

  • x64
  • armv7
  • armv8

Supported tags

There are multiple image tags provided for end users. These tags are available on DockerHub and GitHub Packages, see the full list here. The most important tags are listed below.

Latest images

Latest WireMock 2.x images

Deprecated and experimental tags

Using WireMock in Docker

To start WireMock with the default settings:

docker run -it --rm -p 8080:8080 wiremock/wiremock

By default, the image exposes the 8080 port for HTTP. To verify the WireMock state, access http://localhost:8080/__admin/health to display the health status and the information. The /__admin/health endpoint is available for WireMock 3.1.0 or above.

Configuring WireMock

You can configure WireMock using the following ways:

  • Passing the CLI arguments
  • Passing Environment variables
  • Passing configuration files via volumes
  • Building a custom image using wiremock/wiremock as a base image

Passing the CLI arguments

To start with these WireMock arguments, you can add them to the end of the command line. For example, to enable HTTPs: --https-port 8443 --verbose

docker run -it --rm -p 8443:8443 wiremock/wiremock --https-port 8443 --verbose

Using environment variables

The following environment variables are supported by the image:

  • uid : the container executor uid, useful to avoid file creation owned by root
  • JAVA_OPTS : for passing any custom options to Java e.g. -Xmx128m
  • WIREMOCK_OPTIONS: CLI options to be passed to WireMock (starting from 3.2.0-2).

Example for passing the CLI options:

docker run -it --rm \
  -e WIREMOCK_OPTIONS='--https-port 8443 --verbose' \
  -p 8443:8443 \
  --name wiremock \
  wiremock/wiremock:latest

Passing configuration files as volumes

Inside the container, the WireMock uses /home/wiremock as the root from which it reads the mappings and __files directories. This means you can mount a directory containing these from your host machine into Docker and WireMock will load the stub mappings.

To mount the current directory use -v $PWD:/home/wiremock e.g.:

docker run -it --rm \
  -p 8080:8080 \
  --name wiremock \
  -v $PWD:/home/wiremock \
  wiremock/wiremock:{{ site.wiremock_version }}

Building your own image

Inside the container, the WireMock uses /home/wiremock as the root from which it reads the mappings and __files directories. This means you can copy your configuration from your host machine into Docker and WireMock will load the stub mappings.

WireMock utilizes a custom entrypoint script that passes all provided arguments as WireMock startup parameters. To modify the WireMock launch parameters it is recommended to override the entrypoint in your custom Docker image.

# Sample Dockerfile
FROM wiremock/wiremock:latest
COPY wiremock /home/wiremock
ENTRYPOINT ["/docker-entrypoint.sh", "--global-response-templating", "--disable-gzip", "--verbose"]

Using WireMock extensions

You can use any WireMock extension with the Docker image. They can be added via CLI and volumes, but for most of the use-cases it is recommended to build a custom image by extending the official one.

Using extensions in CLI

For old style extensions (that don't have Java service loader metadata) you need to add the extension JAR file into the extensions directory and specify the name of the extension's main class via the --extensions parameter:

# prepare extension folder
mkdir wiremock-docker/samples/random/extensions
# download extension
wget https://repo1.maven.org/maven2/com/opentable/wiremock-body-transformer/1.1.3/wiremock-body-transformer-1.1.3.jar \
  -O wiremock-docker/samples/random/extensions/wiremock-body-transformer-1.1.3.jar
# run a container using extension 
docker run -it --rm \
  -p 8080:8080 \
  -v $PWD/wiremock-docker/samples/random/stubs:/home/wiremock \
  -v $PWD/wiremock-docker/samples/random/extensions:/var/wiremock/extensions \
  wiremock/wiremock \
    --extensions com.opentable.extension.BodyTransformer

For new style extensions the --extensions part should not be included as the extension will be discovered and loaded automatically:

# prepare extension folder
mkdir wiremock-docker/samples/random/extensions
# download extension
wget https://repo1.maven.org/maven2/org/wiremock/wiremock-grpc-extension-standalone/0.5.0/wiremock-grpc-extension-standalone-0.5.0.jar \
  -O wiremock-docker/samples/random/extensions/wiremock-grpc-extension-standalone-0.5.0.jar
# run a container using extension 
docker run -it --rm \
  -p 8080:8080 \
  -v $PWD/wiremock-docker/samples/random/stubs:/home/wiremock \
  -v $PWD/wiremock-docker/samples/random/extensions:/var/wiremock/extensions \
  wiremock/wiremock

Using extensions in the Dockerfile

git clone https://github.com/wiremock/wiremock-docker.git
docker build -t wiremock-random wiremock-docker/samples/random
docker run -it --rm -p 8080:8080 wiremock-random

Access http://localhost:8080/random to show random number

Advanced use-cases

Using HTTPs

For HTTPs, the 8443 port is exposed by default. To run with HTTPs, run the following command:

docker run -it --rm -p 8443:8443 wiremock/wiremock --https-port 8443 --verbose

To check the HTTPs on the default exposed port, use https://localhost:8443/__admin to check HTTPs working.

Using the Record Mode

In Record mode, when binding host folders (e.g. $PWD/test) with the container volume (/home/wiremock), the created files will be owned by root, which is, in most cases, undesired. To avoid this, you can use the uid docker environment variable to also bind host uid with the container executor uid.

docker run -d --name wiremock-container \
  -p 8080:8080 \
  -v $PWD/test:/home/wiremock \
  -e uid=$(id -u) \
  wiremock/wiremock \
    --proxy-all="http://registry.hub.docker.com" \
    --record-mappings --verbose
curl http://localhost:8080
docker rm -f wiremock-container

Check the created file owner with ls -alR test

However, the example above is a facility. The good practice is to create yourself the binded folder with correct permissions and to use the -u docker argument.

mkdir test
docker run -d --name wiremock-container \
  -p 8080:8080 \
  -v $PWD/test:/home/wiremock \
  -u $(id -u):$(id -g) \
  wiremock/wiremock \
    --proxy-all="http://registry.hub.docker.com" \
    --record-mappings --verbose
curl http://localhost:8080
docker rm -f wiremock-container

Check the created file owner with ls -alR test

Docker Compose

Configuration in compose file is similar to Dockerfile definition

# Sample compose file
version: "3"
services:
  wiremock:
    image: "wiremock/wiremock:latest"
    container_name: my_wiremock
    entrypoint: ["/docker-entrypoint.sh", "--global-response-templating", "--disable-gzip", "--verbose"]

You can also mount your local __files and mappings files into the container e.g:

# Sample compose file
version: "3"
services:
  wiremock:
    image: "wiremock/wiremock:latest"
    container_name: my_wiremock
    volumes:
      - ./__files:/home/wiremock/__files
      - ./mappings:/home/wiremock/mappings
    entrypoint: ["/docker-entrypoint.sh", "--global-response-templating", "--disable-gzip", "--verbose"]

References

More Repositories

1

wiremock

A tool for mocking HTTP services
Java
6,261
star
2

kotlin-wiremock

Kotlin DSL for WireMock
Kotlin
42
star
3

go-wiremock

Golang WireMock admin API client
Go
31
star
4

wiremock-testcontainers-java

TestContainers Module for WireMock
Java
27
star
5

wiremock-webhooks-extension

Webhook simulation for WireMock
Java
24
star
6

wiremock-graphql-extension

GraphQL extension for WireMock
Kotlin
22
star
7

helm-charts

Helm Chart for Wiremock deployment on Kubernetes
Smarty
19
star
8

wiremock-npm

Wiremock Standalone wrapped in an NPM package so that it can be run with 'npx wiremock'.
JavaScript
16
star
9

api-template-library

WireMock API Templates Library
Shell
15
star
10

wiremock-grpc-extension

WireMock Extension: gRPC mocking
Java
13
star
11

wiremock.org

WireMock website, powered by Jekyll. Contributions are welcome!
HTML
11
star
12

wiremock-cloud-demo-app

MockLab demo Java app based on Spring Boot
Java
8
star
13

wiremock-testcontainers-node

WireMock module for Testcontainers for NodeJS
JavaScript
8
star
14

wiremock-jaxrs

Automates configuration of Wiremock stubs from JAX-RS annotated resources.
Java
7
star
15

robotframework-wiremock

Robot framework library for WireMock
RobotFramework
6
star
16

wiremock-faker-extension

Java
6
star
17

wiremock-pact

Get requests from Wiremock and create PACT JSON.
Java
5
star
18

com.github.tomakehurst-relocation

Temporary relocation parent POMs for WireMock packages
2
star
19

wiremock-community-analytics

WireMock Community Analytics, powered by GrimoireLab and a few scripts
Shell
2
star
20

library.wiremock.org-sources

WireMock API Templates Library
HTML
2
star
21

wiremock-quarkus-devservice-demo

Demo of the Quarkus Dev service for WireMock
HTML
1
star
22

wiremock-extension-state

Java
1
star
23

ecosystem

Feature requests and documentation for all things WireMock ecosystem: integrations, extensions, etc.
1
star
24

spec

WireMock Specifications
1
star
25

.github

Configurations for the GitHub Repository
1
star
26

community

Shared repository for community matters: governance, artwork, TODOs, etc.
1
star
27

wiremock-jwt-extension

Handlebars template helper for producing JWT and JWKS
Java
1
star