Skip to content

Commit

Permalink
Merge pull request #111 from RafeArnold/dockerfile-healthcheck
Browse files Browse the repository at this point in the history
add HEALTHCHECK to dockerfiles.
  • Loading branch information
RafeArnold authored Jun 4, 2024
2 parents 565573e + ed6fa46 commit 9c960a5
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 0 deletions.
2 changes: 2 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,6 @@ COPY docker-entrypoint.sh /

EXPOSE 8080 8443

HEALTHCHECK --start-period=5s --start-interval=100ms CMD curl -f http://localhost:8080/__admin/health || exit 1

ENTRYPOINT ["/docker-entrypoint.sh"]
2 changes: 2 additions & 0 deletions Dockerfile-nightly
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,6 @@ RUN mkdir -p /home/wiremock/mappings && \

EXPOSE 8080 8443

HEALTHCHECK --start-period=5s --start-interval=100ms CMD curl -f http://localhost:8080/__admin/health || exit 1

ENTRYPOINT ["/docker-entrypoint.sh"]
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ To verify the WireMock state,
access [http://localhost:8080/__admin/health](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.

A [HEALTHCHECK](https://docs.docker.com/reference/dockerfile/#healthcheck) is also built into the docker image to
allow direct querying of the docker container's health status.
Under the hood, this uses the same method as above to verify the status of the container.

## Configuring WireMock

You can configure WireMock using the following ways:
Expand Down
2 changes: 2 additions & 0 deletions alpine/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,6 @@ COPY docker-entrypoint.sh /

EXPOSE 8080 8443

HEALTHCHECK --start-period=5s --start-interval=100ms CMD wget --no-verbose --tries=1 --spider http://localhost:8080/__admin/health || exit 1

ENTRYPOINT ["/docker-entrypoint.sh"]
2 changes: 2 additions & 0 deletions alpine/Dockerfile-nightly
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,6 @@ COPY docker-entrypoint.sh /

EXPOSE 8080 8443

HEALTHCHECK --start-period=5s --start-interval=100ms CMD wget --no-verbose --tries=1 --spider http://localhost:8080/__admin/health || exit 1

ENTRYPOINT ["/docker-entrypoint.sh"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Copyright (C) 2024 WireMock Inc, Rafe Arnold and all project contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wiremock.docker.it;

import org.junit.jupiter.api.Test;
import org.testcontainers.containers.wait.strategy.Wait;
import org.wiremock.integrations.testcontainers.WireMockContainer;

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

import static org.assertj.core.api.Assertions.assertThat;

class HealthTest {

@Test
public void containerCanWaitForDockerHealthcheck() throws Exception {
try (WireMockContainer wiremockServer =
new WireMockContainer(TestConfig.WIREMOCK_IMAGE).waitingFor(Wait.forHealthcheck())) {
wiremockServer.start();
final HttpClient client = HttpClient.newHttpClient();
final HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(wiremockServer.getUrl("/__admin/health")))
.timeout(Duration.ofSeconds(1))
.GET()
.build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

assertThat(response.statusCode()).isEqualTo(200);
}
}
}

0 comments on commit 9c960a5

Please sign in to comment.