MockServer is available as a docker container that allows you to easily run MockServer as a separate container on any environment without having to install Java or any other libraries. The docker container fully encapsulates all requirements required to run MockServer (such as Java) and separates the running MockServer instance from all other parts of the system.
MockServer docker container can be found at MockServer Docker
Running MockServer Docker ContainerThe typical sequence for running the MockServer docker image is as follows: customise how the container is run.
To install Docker see the installation instructions.
Pull MockServer Image
To pull the MockServer Docker image use the pull command, as follows:
docker pull mockserver/mockserver
This is not strictly necessary as the image will be automatically pulled if it does not exist when the run command is used. However, using the pull command will ensure the latest version of the image is downloaded.
Run MockServer Container
Then to run MockServer as a Docker container run the following command:
docker run -d --rm -P mockserver/mockserver
The -P switch in this command tells Docker to map all ports exported by the MockServer container to dynamically allocated ports on the host machine.
To view information about the MockServer container, including which dynamic ports have been used run the following command:
Configure Port Mapping
This MockServer docker container exports the following port:
- serverPort 1080
To specify which ports (on the host machine) should be mapped to the MockServer docker container use the -p <host port>:<container port> option, as follows:
docker run -d --rm -p <serverPort>:1080 mockserver/mockserver
docker run -d --rm -p 1080:1080 mockserver/mockserver
Modifying Default Command
By default when the MockServer container runs it executes a bash script passing three command line options, as follows
-logLevel INFO -serverPort 1080
This can be modified to change the command line options passed to the MockServer for example:
docker run --rm --name mockserver -p 1080:1090 mockserver/mockserver -logLevel INFO -serverPort 1090 -proxyRemotePort 443 -proxyRemoteHost mock-server.com
MockServer uses distroless as its based container for both size and security and so does not contain an interactive shell. This minimises the likelihood of vulnerabilities and to reduces the attack surface by ensuring only the JVM and MockServer code is inside the container.
Detailed MockServer Configuration
To support configuring MockServer a mockserver.properties will be loaded from /config directory if it exists.
A mockserver.properties configuration file and other related configuration files such as json expectation initialization, or custom TLS CA, X.509 Certificate or Private Key should be mapping into the /config directory.For example to add configuration files in the current directory, such as mockserver.properties, map $(pwd) into /config, as follows:
docker run -v $(pwd):/config -p 1080:1080 mockserver/mockserver -serverPort 1080
See MockServer Configuration for details of all configuration options.As the Docker image is based from gcr.io/distroless/java:11 and the user nonroot is used, we need to configure permissions in order to allow the user in the container read/write files in mounted volumes:
chmod o+r $(pwd)/mockserver.properties
Extending MockServer Classpath
To support adding classes to the classpath any jar files contained in the /libs directory will be added into MockServer classpath.For example to add all jar files in the current directory, map $(pwd) into /libs, as follows:
docker run -v $(pwd):/libs -p 1080:1080 mockserver/mockserver -serverPort 1080
MockServer can be run using docker compose by adding the container as a service.
The MockServer container uses an entrypoint, so it is possible to configure the MockServer by specifying the command line flags using by specifying the command, as follows:
version: "2.4" services: mockServer: image: mockserver/mockserver:mockserver-5.12.0 command: -logLevel DEBUG -serverPort 1090 -proxyRemotePort 80 -proxyRemoteHost www.mock-server.com ports: - 1080:1090
It is also possible to configure the MockServer by setting environment variables, as follows:
version: "2.4" services: mockServer: image: mockserver/mockserver:mockserver-5.12.0 ports: - 1080:1090 environment: MOCKSERVER_MAX_EXPECTATIONS: 100 MOCKSERVER_MAX_HEADER_SIZE: 8192
It is also possible to configure the MockServer by mounting a volume containing a properties file or JSON expectation initializer, as follows:
version: "2.4" services: mockServer: image: mockserver/mockserver:mockserver-5.12.0 ports: - 1080:1080 environment: MOCKSERVER_PROPERTY_FILE: /config/mockserver.properties MOCKSERVER_INITIALIZATION_JSON_PATH: /config/initializerJson.json volumes: - type: bind source: . target: /config