{"id":21553788,"url":"https://github.com/goodservers/docker-doctor","last_synced_at":"2026-04-17T11:32:31.058Z","repository":{"id":28077041,"uuid":"116153574","full_name":"goodservers/docker-doctor","owner":"goodservers","description":"Health checker for your docker containers on server. Zero downtime.","archived":false,"fork":false,"pushed_at":"2023-01-04T21:50:48.000Z","size":1267,"stargazers_count":0,"open_issues_count":16,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-18T02:44:36.448Z","etag":null,"topics":["containers","docker","docker-compose","health-check"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/goodservers.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-01-03T15:40:36.000Z","updated_at":"2020-04-05T18:25:35.000Z","dependencies_parsed_at":"2022-07-27T22:48:18.165Z","dependency_job_id":null,"html_url":"https://github.com/goodservers/docker-doctor","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/goodservers/docker-doctor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goodservers%2Fdocker-doctor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goodservers%2Fdocker-doctor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goodservers%2Fdocker-doctor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goodservers%2Fdocker-doctor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/goodservers","download_url":"https://codeload.github.com/goodservers/docker-doctor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goodservers%2Fdocker-doctor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31927807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T10:35:34.458Z","status":"ssl_error","status_checked_at":"2026-04-17T10:35:09.472Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["containers","docker","docker-compose","health-check"],"created_at":"2024-11-24T07:12:05.912Z","updated_at":"2026-04-17T11:32:31.042Z","avatar_url":"https://github.com/goodservers.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Docker doctor - health checker container for achieving zero downtime when using one container for app\n\n[![CircleCI](https://circleci.com/gh/goodservers/docker-doctor/tree/master.svg?style=svg)](https://circleci.com/gh/goodservers/docker-doctor/tree/master)\n\nThe docker container checker waits until the new container is fully prepared and then removes the old one. Basically it checks the docker event sent from staring container. If have set `HEALTH_CHECKER` environment property then waits until their health is ok and afterwards old container is stopped and removed.\n\n## Example\n\nYou have some application defined in docker (see `examples/nodejsapp`). When your CI runs the deployment phase it starts the new container and removes old one. But it takes some time to boot up application to healthy state. And if you have only one container it causes downtime. So you can setup the checker which waits until the new container is fully prepared and then removes the old one.\n\n## Setup on server\n\n```\ndocker-compose up\n```\n\nor see the example of usage with nginx, nginx-proxy, letsencrypt as a server [docker-gateway](https://github.com/goodservers/docker-gateway)\n\n## Setup for example app `examples/nodejsapp`\n\n```\ndocker-compose -f docker-compose.yml --project-name=$(date +%s) up --scale nodejs_app=1 -d\n```\n\n## Environment props\n\n| env              | values      | default | meaning                                                   |\n| ---------------- | ----------- | ------- | --------------------------------------------------------- |\n| VIRTUAL_PORT     | number      | -       | application listening port (same name as for nginx-proxy) |\n| HEALTH_CHECKER   | http, https | -       | active script used to check health                        |\n| HEALTH_MAX_RETRY | number      | 30      | (optional) maximum number of attempts to check health     |\n| HEALTH_TIMEOUT   | number      | 1000    | (optional) number of ms to check in one attempt           |\n\n## Requirements\n\n- [Good VPS or dedicated server](https://goodservers.io)\n- Installed docker and docker-compose\n- [nginx-proxy](https://github.com/goodservers/docker-gateway) as a gateway for your deployed containers - they are automatically proxied - so your service is balanced between two containers.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoodservers%2Fdocker-doctor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoodservers%2Fdocker-doctor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoodservers%2Fdocker-doctor/lists"}