You, like me, might assume that when you write a docker-compose healthcheck, it does something useful with that information. So for instance you might add something like this to your docker-compose file:
healthcheck:
test: ["CMD", "curl", "-f", "-L", "http://localhost/website.aspx"]
interval: 5s
timeout: 10s
retries: 2
start_period: 60s
You run your docker container in production and when the container is running but no longer working, your site will go down. Being a reasonable human being you check docker-compose ps
to see if docker knows your container is down. Weirdly, docker DOES know that the docker container is unhealthy but seems to do nothing with this information.
Wait, so Docker just records that the container is unhealthy?
Apparently! I have no idea why you would do that or what the purpose of a healthcheck is if not to kill and restart the container. However there is a good solution.
The quick fix to make standalone Docker do what you want
image: willfarrell/autoheal:latest
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- AUTOHEAL_CONTAINER_LABEL=all
- AUTOHEAL_START_PERIOD=60
This small container will automatically restart unhealthy containers and works great. Huge fan.