diff --git a/cmd/root.go b/cmd/root.go index dbb7e89..ff46da7 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -152,6 +152,15 @@ func Run(c *cobra.Command, names []string) { enableMetricsAPI, _ := c.PersistentFlags().GetBool("http-api-metrics") unblockHTTPAPI, _ := c.PersistentFlags().GetBool("http-api-periodic-polls") apiToken, _ := c.PersistentFlags().GetString("http-api-token") + healthCheck, _ := c.PersistentFlags().GetBool("health-check") + + if healthCheck { + // health check should not have pid 1 + if os.Getpid() == 1 { + os.Exit(1) + } + os.Exit(0) + } if rollingRestart && monitorOnly { log.Fatal("Rolling restarts is not compatible with the global monitor only flag") diff --git a/dockerfiles/Dockerfile b/dockerfiles/Dockerfile index 6429eb1..3c9b78f 100644 --- a/dockerfiles/Dockerfile +++ b/dockerfiles/Dockerfile @@ -17,4 +17,7 @@ COPY --from=alpine \ EXPOSE 8080 COPY watchtower / + +HEALTHCHECK CMD [ "/watchtower", "--health-check"] + ENTRYPOINT ["/watchtower"] diff --git a/dockerfiles/Dockerfile.dev-self-contained b/dockerfiles/Dockerfile.dev-self-contained index 79dbe39..7126459 100644 --- a/dockerfiles/Dockerfile.dev-self-contained +++ b/dockerfiles/Dockerfile.dev-self-contained @@ -35,4 +35,6 @@ COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certifi COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo COPY --from=builder /watchtower/watchtower /watchtower +HEALTHCHECK CMD [ "/watchtower", "--health-check"] + ENTRYPOINT ["/watchtower"] diff --git a/dockerfiles/Dockerfile.self-contained b/dockerfiles/Dockerfile.self-contained index 303fc53..04a6047 100644 --- a/dockerfiles/Dockerfile.self-contained +++ b/dockerfiles/Dockerfile.self-contained @@ -35,4 +35,6 @@ COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certifi COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo COPY --from=builder /go/watchtower/watchtower /watchtower +HEALTHCHECK CMD [ "/watchtower", "--health-check"] + ENTRYPOINT ["/watchtower"] diff --git a/docs/arguments.md b/docs/arguments.md index d0e46ae..5aa6e59 100644 --- a/docs/arguments.md +++ b/docs/arguments.md @@ -363,4 +363,15 @@ requests and may rate limit pull requests (mainly docker.io). Environment Variable: WATCHTOWER_WARN_ON_HEAD_FAILURE Possible values: always, auto, never Default: auto -``` \ No newline at end of file +``` + +## Health check + +Run health check and exit. + +```text + Argument: --health-check +Environment Variable: WATCHTOWER_HEALTH_CHECK + Possible values: - + Default: - +``` diff --git a/internal/flags/flags.go b/internal/flags/flags.go index 5428b95..2e2e72a 100644 --- a/internal/flags/flags.go +++ b/internal/flags/flags.go @@ -186,6 +186,12 @@ func RegisterSystemFlags(rootCmd *cobra.Command) { "log-level", viper.GetString("WATCHTOWER_LOG_LEVEL"), "The maximum log level that will be written to STDERR. Possible values: panic, fatal, error, warn, info, debug or trace") + + flags.BoolP( + "health-check", + "", + viper.IsSet("WATCHTOWER_HEALTH_CHECK"), + "Do health check and exit") } // RegisterNotificationFlags that are used by watchtower to send notifications