Top Related Projects
Slim(toolkit): Don't change anything in your container image and minify it by up to 30x (and for compiled languages even more) making it secure too! (free and open source)
A process for automating Docker container base image updates.
Automatically update running docker containers with newest available image
An open-source, next-generation "runc" that empowers rootless containers to run workloads such as Systemd, Docker, Kubernetes, just like VMs.
Quick Overview
The willfarrell/docker-autoheal repository is a Docker container that automatically detects and restarts unhealthy Docker containers. It monitors the health status of other containers and takes action when they become unhealthy, helping to maintain the overall stability of a Docker-based system.
Pros
- Improves system reliability by automatically restarting unhealthy containers
- Easy to set up and integrate into existing Docker environments
- Lightweight and consumes minimal resources
- Customizable through environment variables
Cons
- Requires containers to have health checks configured
- May mask underlying issues by restarting containers without addressing root causes
- Limited to Docker environments and not applicable to other container runtimes
- Potential for cascading restarts if not configured properly
Getting Started
To use the docker-autoheal container, follow these steps:
- Pull the docker-autoheal image:
docker pull willfarrell/autoheal
- Run the container with the following command:
docker run -d \
--name autoheal \
--restart=always \
-e AUTOHEAL_CONTAINER_LABEL=all \
-v /var/run/docker.sock:/var/run/docker.sock \
willfarrell/autoheal
- Ensure your other containers have health checks configured and the
autoheal=true
label:
version: '3'
services:
my_app:
image: my_app_image
labels:
- "autoheal=true"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
With these steps, the autoheal container will monitor and restart unhealthy containers in your Docker environment.
Competitor Comparisons
Slim(toolkit): Don't change anything in your container image and minify it by up to 30x (and for compiled languages even more) making it secure too! (free and open source)
Pros of Slim
- Focuses on reducing Docker image size, potentially improving deployment speed and resource usage
- Offers a more comprehensive toolset for image analysis and optimization
- Provides a CLI tool for easier integration into development workflows
Cons of Slim
- More complex to set up and use compared to the simpler autoheal functionality
- May require more configuration and fine-tuning to achieve optimal results
- Not specifically designed for container health monitoring and automatic restarts
Code Comparison
Slim example (analyzing a Docker image):
slim build --target my-image:latest --http-probe
Docker-autoheal example (in docker-compose.yml):
services:
autoheal:
image: willfarrell/autoheal
environment:
- AUTOHEAL_CONTAINER_LABEL=all
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Summary
Slim is a powerful tool for optimizing Docker images, offering extensive analysis and size reduction capabilities. It's more complex but provides greater control over image optimization. Docker-autoheal, on the other hand, is a simpler solution focused specifically on monitoring container health and performing automatic restarts when needed. The choice between the two depends on whether the primary goal is image optimization (Slim) or container health management (Docker-autoheal).
A process for automating Docker container base image updates.
Pros of Watchtower
- Automatically updates Docker containers to the latest available image
- Supports multiple update policies (e.g., always, on schedule)
- Can notify users about updates via various notification channels
Cons of Watchtower
- Lacks specific container health monitoring features
- May not be suitable for environments requiring strict version control
- Doesn't offer granular control over individual container restart policies
Code Comparison
Autoheal:
docker run -d \
--name autoheal \
--restart=always \
-e AUTOHEAL_CONTAINER_LABEL=all \
-v /var/run/docker.sock:/var/run/docker.sock \
willfarrell/autoheal
Watchtower:
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
Summary
Autoheal focuses on monitoring and restarting unhealthy containers, while Watchtower emphasizes keeping containers updated with the latest images. Autoheal is better suited for maintaining container health in production environments, whereas Watchtower excels in development or staging environments where frequent updates are desired. The choice between the two depends on specific use cases and requirements for container management and maintenance.
Automatically update running docker containers with newest available image
Pros of Ouroboros
- Automatically updates containers to their latest versions
- Supports multiple container orchestration platforms (Docker, Kubernetes)
- Offers more customization options and flexibility
Cons of Ouroboros
- More complex setup and configuration
- Potentially higher resource usage due to additional features
Code Comparison
Autoheal:
docker run -d \
--name autoheal \
--restart=always \
-e AUTOHEAL_CONTAINER_LABEL=all \
-v /var/run/docker.sock:/var/run/docker.sock \
willfarrell/autoheal
Ouroboros:
docker run -d \
--name ouroboros \
-v /var/run/docker.sock:/var/run/docker.sock \
pyouroboros/ouroboros
Key Differences
-
Functionality:
- Autoheal focuses on restarting unhealthy containers
- Ouroboros updates containers to their latest versions
-
Scope:
- Autoheal is primarily for Docker environments
- Ouroboros supports multiple container platforms
-
Complexity:
- Autoheal is simpler to set up and use
- Ouroboros offers more features but requires more configuration
-
Resource Usage:
- Autoheal is generally lighter on system resources
- Ouroboros may consume more resources due to its broader functionality
-
Customization:
- Autoheal has limited customization options
- Ouroboros provides more flexibility in terms of update schedules and container selection
An open-source, next-generation "runc" that empowers rootless containers to run workloads such as Systemd, Docker, Kubernetes, just like VMs.
Pros of Sysbox
- Provides stronger isolation and security for containers by creating system containers
- Enables running Docker and Kubernetes inside containers, allowing for nested containerization
- Supports a wider range of use cases, including running systemd, Docker, and Kubernetes inside containers
Cons of Sysbox
- More complex setup and configuration compared to Docker Autoheal
- Requires specific kernel features and may not be compatible with all systems
- Higher resource overhead due to the creation of system containers
Code Comparison
Docker Autoheal:
HEALTHCHECK --interval=5s --timeout=3s --retries=3 \
CMD curl -f http://localhost/ || exit 1
Sysbox:
docker run --runtime=sysbox-runc -it --rm \
--name=syscont nestybox/ubuntu-bionic-systemd-docker
Summary
Docker Autoheal is a lightweight solution focused on automatically restarting unhealthy containers, while Sysbox is a more comprehensive container runtime that provides enhanced isolation and functionality. Sysbox offers greater flexibility and security but comes with increased complexity and resource requirements. The choice between the two depends on specific use cases and infrastructure needs.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Docker Autoheal
Monitor and restart unhealthy docker containers.
This functionality was proposed to be included with the addition of HEALTHCHECK
, however didn't make the cut.
This container is a stand-in till there is native support for --exit-on-unhealthy
https://github.com/docker/docker/pull/22719.
Supported tags and Dockerfile links
latest
(Dockerfile) - Built daily1.1.0
(Dockerfile)v0.7.0
(Dockerfile)
How to use
1. Docker CLI
UNIX socket passthrough
docker run -d \
--name autoheal \
--restart=always \
-e AUTOHEAL_CONTAINER_LABEL=all \
-v /var/run/docker.sock:/var/run/docker.sock \
willfarrell/autoheal
TCP socket
docker run -d \
--name autoheal \
--restart=always \
-e AUTOHEAL_CONTAINER_LABEL=all \
-e DOCKER_SOCK=tcp://$HOST:$PORT \
-v /path/to/certs/:/certs/:ro \
willfarrell/autoheal
TCP with mTLS (HTTPS)
docker run -d \
--name autoheal \
--restart=always \
--tlscacert=/certs/ca.pem \
--tlscert=/certs/client-cert.pem \
--tlskey=/certs/client-key.pem \
-e AUTOHEAL_CONTAINER_LABEL=all \
-e DOCKER_HOST=tcp://$HOST:2376 \
-e DOCKER_SOCK=tcps://$HOST:2376 \
-e DOCKER_TLS_VERIFY=1 \
-v /path/to/certs/:/certs/:ro \
willfarrell/autoheal
The certificates and keys need these names and resides under /certs inside the container:
- ca.pem
- client-cert.pem
- client-key.pem
See https://docs.docker.com/engine/security/https/ for how to configure TCP with mTLS
Change Timezone
If you need the timezone to match the local machine, you can map the /etc/localtime
into the container.
docker run ... -v /etc/localtime:/etc/localtime:ro
2. Use in your container image
Choose one of the three alternatives:
a) Apply the label autoheal=true
to your container to have it watched;
b) Set ENV AUTOHEAL_CONTAINER_LABEL=all
to watch all running containers;
c) Set ENV AUTOHEAL_CONTAINER_LABEL
to existing container label that has the value true
;
Note: You must apply
HEALTHCHECK
to your docker images first.
See https://docs.docker.com/engine/reference/builder/#healthcheck for details.
Docker Compose (example)
services:
app:
extends:
file: ${PWD}/services.yml
service: app
labels:
autoheal-app: true
autoheal:
deploy:
replicas: 1
environment:
AUTOHEAL_CONTAINER_LABEL: autoheal-app
image: willfarrell/autoheal:latest
network_mode: none
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
Optional Container Labels
autoheal.stop.timeout=20 | Per containers override for stop timeout seconds during restart |
---|
Environment Defaults
Variable | Description |
---|---|
AUTOHEAL_CONTAINER_LABEL=autoheal | set to existing label name that has the value true |
AUTOHEAL_INTERVAL=5 | check every 5 seconds |
AUTOHEAL_START_PERIOD=0 | wait 0 seconds before first health check |
AUTOHEAL_DEFAULT_STOP_TIMEOUT=10 | Docker waits max 10 seconds (the Docker default) for a container to stop before killing during restarts (container overridable via label, see below) |
AUTOHEAL_ONLY_MONITOR_RUNNING=false | All containers monitored by default. Set this to true to only monitor running containers. This will result in Paused contaners being ignored. |
DOCKER_SOCK=/var/run/docker.sock | Unix socket for curl requests to Docker API |
CURL_TIMEOUT=30 | --max-time seconds for curl requests to Docker API |
WEBHOOK_URL="" | post message to the webhook if a container was restarted (or restart failed) |
Testing (building locally)
docker buildx build -t autoheal .
docker run -d \
-e AUTOHEAL_CONTAINER_LABEL=all \
-v /var/run/docker.sock:/var/run/docker.sock \
autoheal
Top Related Projects
Slim(toolkit): Don't change anything in your container image and minify it by up to 30x (and for compiled languages even more) making it secure too! (free and open source)
A process for automating Docker container base image updates.
Automatically update running docker containers with newest available image
An open-source, next-generation "runc" that empowers rootless containers to run workloads such as Systemd, Docker, Kubernetes, just like VMs.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot