wiremock / wiremock/wiremock-docker

Running container is considered unhealthy

Open
#113 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Java
Stars
240
Forks
108
PR merge metrics
No merged PRs in 30d

Description

Proposal
The Problem

When running running the image with a custom port, the docker system considers the container as unhealthy though it is not. In fact the __admin/health endpoint returns `status: "healthy".

Expected

When running the image with a custom port the docker system considers the container as healthy.

Actual Behavior

The docker system considers the container unhealthy.

Reproduction steps

Start the WireMock image - spoiler shows expected output

$ docker run -it --rm -p 8089:8089 -e WIREMOCK_OPTIONS='--port 8089' wiremock/wiremock

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

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

version:                      3.9.1
port:                         8089
enable-browser-proxying:      false
disable-banner:               false
no-request-journal:           false
verbose:                      false

extensions:                   response-template,webhook

Check health endpoint - also here everything looks fine

$ curl -sS -X GET http://localhost:8089/__admin/health | jq
{
  "status": "healthy",
  "message": "Wiremock is ok",
  "version": "3.9.1",
  "uptimeInSeconds": 56,
  "timestamp": "2024-09-06T13:39:53.020787Z"
}

Check docker container - status states (unhealthy)

$ docker ps 
CONTAINER ID   IMAGE               COMMAND                  CREATED              STATUS                          PORTS                                        NAMES
a482d4afd42b   wiremock/wiremock   "/docker-entrypoint.…"   About a minute ago   Up About a minute (unhealthy)   8080/tcp, 8443/tcp, 0.0.0.0:8089->8089/tcp   confident_goodall

At this point one could state this doesn't look as a big issue as the container is up and running and serving as expected. The problem manifests rather when WireMock is set up utilizing docker compose.

Example docker-compose.yaml

services:
  wiremock:
    image: wiremock/wiremock
    container_name: wiremock-local
    entrypoint: [ "/docker-entrypoint.sh", "--port=8089"]
    ports:
      - "8089:8089"

And the docker compose command that fails

$ docker compose up --wait
[+] Building 0.0s (0/0)                                                                                                                                                  
[+] Running 0/1
 ⠿ Container wiremock-main  Waiting                                                                                                                                90.8s 
container wiremock-main is unhealthy
References

A brief investigation (docker inspect) of the running container pointed to the underlying problem

$ docker inspect confident_goodall
...
            "Health": {
                "Status": "unhealthy",
                "FailingStreak": 31,
                "Log": [
                    {
                        "Start": "2024-09-06T16:07:05.878727105+02:00",
                        "End": "2024-09-06T16:07:06.012145585+02:00",
                        "ExitCode": 1,
                        "Output": "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\ncurl: (7) Failed to connect to localhost port 8080 after 2 ms: Couldn't connect to server\n"
                    },
                    {
                        "Start": "2024-09-06T16:07:36.019068045+02:00",
                        "End": "2024-09-06T16:07:36.110571656+02:00",
                        "ExitCode": 1,
                        "Output": "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\ncurl: (7) Failed to connect to localhost port 8080 after 2 ms: Couldn't connect to server\n"
                    },
                    {
                        "Start": "2024-09-06T16:08:06.115316283+02:00",
                        "End": "2024-09-06T16:08:06.242779708+02:00",
                        "ExitCode": 1,
                        "Output": "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\ncurl: (7) Failed to connect to localhost port 8080 after 2 ms: Couldn't connect to server\n"
                    },
                    {
                        "Start": "2024-09-06T16:08:36.249012972+02:00",
                        "End": "2024-09-06T16:08:36.387739973+02:00",
                        "ExitCode": 1,
                        "Output": "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\ncurl: (7) Failed to connect to localhost port 8080 after 2 ms: Couldn't connect to server\n"
                    },
                    {
                        "Start": "2024-09-06T16:09:06.393761069+02:00",
                        "End": "2024-09-06T16:09:06.498217177+02:00",
                        "ExitCode": 1,
                        "Output": "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\ncurl: (7) Failed to connect to localhost port 8080 after 2 ms: Couldn't connect to server\n"
                    }
                ]
            }
...
            "Healthcheck": {
                "Test": [
                    "CMD-SHELL",
                    "curl -f http://localhost:8080/__admin/health || exit 1"
                ],
                "StartPeriod": 5000000000
            },
...

Docker engine in use

$ docker version
Client: Docker Engine - Community
 Version:           24.0.2
 API version:       1.43
 Go version:        go1.20.4
 Git commit:        cb74dfc
 Built:             Thu May 25 21:52:13 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.2
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.4
  Git commit:       659604f
  Built:            Thu May 25 21:52:13 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.21
  GitCommit:        3dce8eb055cbb6872793272b4f20ed16117344f8
 runc:
  Version:          1.1.7
  GitCommit:        v1.1.7-0-g860f061
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the issue with the documented docker run command and the docker-compose.yaml example. Inspect the image healthcheck and /docker-entrypoint.sh, focusing on the hard-coded port shown by docker inspect. Done means a custom WireMock port reports healthy and docker compose up --wait succeeds.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker
Domain
devops, infrastructure
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.